SpellHelper_Stack = {} 
SPELL_HELPER_MAX_BUTTONS = 4 
if (GetLocale() == "zhCN") then 
MOD_SPELLHELPER_TITLE = "法术助手" 
SPELLHELPER_SHOW_NEW_SPELL = "便捷显示新学法术" 
elseif (GetLocale() == "zhTW") then 
MOD_SPELLHELPER_TITLE = "法術助手" 
SPELLHELPER_SHOW_NEW_SPELL = "便捷顯示新學法術" 
else 
MOD_SPELLHELPER_TITLE = "Spell Helper" 
SPELLHELPER_SHOW_NEW_SPELL = "Show new spell easily" 
end
 
SpellHelperHHHH1 = {};
SpellHelperHHHH1[1] = 1;

function SpellHelper_OnLoad() 
--    ModManagement_RegisterMod( "SpellHelper", "Interface\\Icons\\INV_Gizmo_06", MOD_SPELLHELPER_TITLE, "", nil ) 
--    ModManagement_RegisterCheckBox( "SpellHelper", SPELLHELPER_SHOW_NEW_SPELL, nil, "DisableQuestFading", 1, 
--    function(SpellHelperHHH1) 
        if ( SpellHelperHHHH1[1] == 1 ) then 
           BigFootSpells_RegisterNewSpellSink(BIGFOOT_SPELL_EVENT_NEW, "SpellHelperButton_Sink") 
        else 
           BigFootSpells_UnregisterNewSpellSink(BIGFOOT_SPELL_EVENT_NEW, "SpellHelperButton_Sink") 
       end
--    end
--   end ) 
end 

--有点疑问
function SpellHelperButton_OnClick(SpellHelperHHH2) 
     local SpellHelperHHH3 = this.info 
     local SpellHelperHHH4 = BigFootSpell_GetSpellIdFromName(SpellHelperHHH3["name"]) 
     if (not SpellHelperHHH4) then 
         SpellHelperButton_Clear(this) 
     end 
     this:SetChecked("false") 
     if (arg1 == "RightButton") then --????
     elseif ( SpellHelperHHH2 ) then 
            PickupSpell(SpellHelperHHH4, SpellHelperHHH3["bookType"]) 
     elseif ( IsShiftKeyDown() ) then 
             if ( MacroFrame:IsVisible() ) then 
                     local spellName, subSpellName = GetSpellName(SpellHelperHHH4, SpellHelperHHH3["bookType"]) 
                     if ( spellName and not IsSpellPassive(SpellHelperHHH4, SpellHelperHHH3["bookType"]) ) then 
                            if ( subSpellName and (strlen(subSpellName) > 0) ) then 
                                   MacroFrame_AddMacroLine(TEXT(SLASH_CAST1).." "..spellName.."("..subSpellName..")") 
                            else 
                                   MacroFrame_AddMacroLine(TEXT(SLASH_CAST1).." "..spellName) 
                            end 
                     end 
             else 
               PickupSpell(SpellHelperHHH4, SpellHelperHHH3["bookType"]) 
             end 
      else 
             CastSpell(SpellHelperHHH4, SpellHelperHHH3["bookType"]) 
      end 
      local SpellHelperFlash = getglobal(this:GetName().."Flash") 
      this:Hide() 
      SpellHelperFlash:Hide() 
      this.info = nil 
      SpellHelperButton_UpdateButtons() 
end 

--无信息清除、隐藏
function SpellHelperButton_Clear(SpellHelperHHH6) 
      SpellHelperHHH6.info = nil 
      SpellHelperHHH6:Hide() 
      local SpellHelperHHH5 = getglobal(SpellHelperHHH6:GetName().."Flash") 
      SpellHelperHHH5:Hide() 
      SpellHelperButton_UpdateButtons() 
end 

--鼠标进入显示
function SpellHelperButton_OnEnter() 
      local SpellHelperHHH3 = this.info 
      local SpellHelperHHH4 = BigFootSpell_GetSpellIdFromName(SpellHelperHHH3["name"]) 
      if (not SpellHelperHHH4) then 
          SpellHelperButton_Clear(this) 
          return 
      end 
      GameTooltip:SetOwner(this, "ANCHOR_RIGHT") 
      if ( GameTooltip:SetSpell(SpellHelperHHH4, SpellHelperHHH3["bookType"]) ) then 
          this.updateTooltip = TOOLTIP_UPDATE_TIME 
      else 
          this.updateTooltip = nil 
      end 
end 

--和上面配合
function SpellHelperButton_OnUpdate(elapsed) 
    if ( not this.updateTooltip ) then 
         return 
    end 
    this.updateTooltip = this.updateTooltip - elapsed 
    if ( this.updateTooltip > 0 ) then 
       return 
    end 
    if ( GameTooltip:IsOwned(this) ) then 
       SpellHelperButton_OnEnter() 
    else 
       this.updateTooltip = nil 
    end 
end 

--注册Drag和Click
function SpellHelperButton_OnLoad() 
   this:RegisterForDrag("LeftButton") 
   this:RegisterForClicks("LeftButtonUp", "RightButtonUp") 
end 

--主函数
function SpellHelperButton_UpdateButtons() 
     for i = 1, SPELL_HELPER_MAX_BUTTONS, 1 do 
       local SpellHelperHHH6 = getglobal("SpellHelperButton"..i) 
       if (SpellHelperHHH6) then 
           if (not SpellHelperHHH6:IsVisible()) then 
              for t = i + 1, SPELL_HELPER_MAX_BUTTONS, 1 do 
                  local SpellHelperHHH9 = getglobal("SpellHelperButton"..t) 
                  if (SpellHelperHHH9 and SpellHelperHHH9:IsVisible()) then 
                      SpellHelperHHH7(SpellHelperHHH6, SpellHelperHHH9) 
                  end 
               end 
             end 
        end 
     end 
     for SpellHelperTTT12, SpellHelperTTT3 in SpellHelper_Stack do          --名字，纹理，法术名字设置
          for i = 1, SPELL_HELPER_MAX_BUTTONS, 1 do 
              local SpellHelperHHH6 = getglobal("SpellHelperButton"..i) 
              if (SpellHelperHHH6 and SpellHelper_Stack[SpellHelperTTT12] and not SpellHelperHHH6:IsVisible()) then 
--                  local SpellHelperHHH10 = SpellHelperHHH6:GetName() 
--                  local SpellHelperHHH11 = getglobal(SpellHelperHHH10.."IconTexture") 
--                  local SpellHelperHHH12 = getglobal(SpellHelperHHH10.."SpellName") 
--                  local SpellHelperHHH13 = getglobal(SpellHelperHHH10.."SubSpellName") 
--                  local SpellHelperHHH5 = getglobal("SpellHelperButton"..i.."Flash") 
                  local SpellHelperName = SpellHelperHHH6:GetName() 
                  local SpellHelperIcon = getglobal(SpellHelperName.."IconTexture") 
                  local SpellHelperSpellName = getglobal(SpellHelperName.."SpellName") 
                  local SpellHelperSub = getglobal(SpellHelperName.."SubSpellName") 
                  local SpellHelperFlash = getglobal("SpellHelperButton"..i.."Flash") 
                  SpellHelperHHH6.info = SpellHelperTTT3 
                  SpellHelperIcon:SetTexture(SpellHelperTTT3["texture"]) 
                  SpellHelperSpellName:SetText(SpellHelperTTT3["spellName"]) 
                  SpellHelperSub:SetText(SpellHelperTTT3["subSpellName"]) 
                  SpellHelperHHH6.info = SpellHelperTTT3 
                  SpellHelperHHH6:Show() 
                  SpellHelperFlash:Show() 
                  SpellHelper_Stack[SpellHelperTTT12] = nil 
               end 
          end 
     end 
     for i = 1, SPELL_HELPER_MAX_BUTTONS, 1 do                                 --闪烁
          local SpellHelperHHH6 = getglobal("SpellHelperButton"..i) 
          if (SpellHelperHHH6:IsVisible()) then 
              UIFrameFlash(SpellHelperFlashFrame, 0.5, 0.5, 30, nil) 
              return 
          end 
     end 
     UIFrameFlashRemoveFrame(SpellHelperFlashFrame) 
end 

--为arg1和arg2设置...
function SpellHelperHHH7(SpellHelperHHH8, SpellHelperHHH9) 
     local SpellHelperHHH3 = SpellHelperHHH9.info 
     SpellHelperHHH9.info = SpellHelperHHH8.info 
     SpellHelperHHH8.info = SpellHelperHHH3 
     if (SpellHelperHHH8.info) then 
--         local SpellHelperHHH10 = SpellHelperHHH8:GetName() 
--        local SpellHelperHHH11 = getglobal(SpellHelperHHH10.."IconTexture") 
--         local SpellHelperHHH12 = getglobal(SpellHelperHHH10.."SpellName") 
--         local SpellHelperHHH13 = getglobal(SpellHelperHHH10.."SubSpellName")
--         local SpellHelperHHH14 = getglobal(SpellHelperHHH10.."Flash")
         local SpellHelperName = SpellHelperHHH8:GetName() 
         local SpellHelperIcon = getglobal(SpellHelperName.."IconTexture") 
         local SpellHelperSpellName = getglobal(SpellHelperName.."SpellName") 
         local SpellHelperSub = getglobal(SpellHelperName.."SubSpellName")
         local SpellHelperFlash = getglobal(SpellHelperName.."Flash") 
         SpellHelperIcon:SetTexture(SpellHelperHHH8.info["texture"]) 
         SpellHelperSpellName:SetText(SpellHelperHHH8.info["spellName"]) 
         SpellHelperSub:SetText(SpellHelperHHH8.info["subSpellName"]) 
         SpellHelperHHH8:Show() 
         SpellHelperFlash:Show() 
     else 
         local SpellHelperNames = SpellHelperHHH8:GetName() 
         local SpellHelperFlashs = getglobal(SpellHelperNames.."Flash") 
         SpellHelperHHH8:Hide() 
         SpellHelperFlashs:Hide() 
     end 
     if (SpellHelperHHH9.info) then 
          local SpellHelperName = SpellHelperHHH9:GetName() 
          local SpellHelperIcon = getglobal(SpellHelperName.."IconTexture") 
          local SpellHelperSpellName = getglobal(SpellHelperName.."SpellName") 
          local SpellHelperSub = getglobal(SpellHelperName.."SubSpellName") 
          local SpellHelperFlash = getglobal(SpellHelperName.."Flash") 
          SpellHelperIcon:SetTexture(SpellHelperHHH9.info["texture"]) 
          SpellHelperSpellName:SetText(SpellHelperHHH9.info["spellName"]) 
          SpellHelperSub:SetText(SpellHelperHHH9.info["subSpellName"]) 
          SpellHelperHHH9:Show() 
          SpellHelperFlash:Show() 
      else 
          local SpellHelperName = SpellHelperHHH9:GetName() 
          local SpellHelperFlash = getglobal(SpellHelperName.."Flash") 
          SpellHelperHHH9:Hide() 
          SpellHelperFlash:Hide() 
      end 
end 

--不要被动，执行设置...
function SpellHelperButton_Sink(SpellHelperHHH16) 
      if (not SpellHelperHHH16["isPassive"]) then 
          SpellHelper_Stack[SpellHelperHHH16["name"]] = SpellHelperHHH16 
          SpellHelperButton_UpdateButtons() 
      end 
end
---------------------------------------------------------------------------------------------------------------------------
BFSHHH6 = {} 
BFSHHH1 = {} 
BFSHHH7 = nil 
BIGFOOT_SPELL_EVENT_NEW = "new spell" 

--注册事件
function BigFootSpells_OnLoad() 
   this:RegisterEvent("SPELLS_CHANGED") 
   this:RegisterEvent("LEARNED_SPELL_IN_TAB") 
   this:RegisterEvent("PLAYER_ENTERING_WORLD") 
end

--event 
function BigFootSpells_OnEvent(event) 
   if (event == "SPELLS_CHANGED" or event == "LEARNED_SPELL_IN_TAB") then 
      BFSHHH8() 
   elseif (event == "PLAYER_ENTERING_WORLD") then 
      BFSHHH7 = 1 
      BFSHHH6 = BFSHHH9() 
   end 
end 

function BFSHHH9() 
   local BFSTTT2 = GetNumSpellTabs() 
   local BFSTTT3, BFSTTTT4, BFSTTT5, BFSTTT6 
   local BFSTTT7 
   local BFSTTT8
   BFSTTT8 = {} 
--   for BFSHHH3 = 1, MAX_SKILLLINE_TABS do
   for i = 1, MAX_SKILLLINE_TABS do 
      if (i <= BFSTTT2) then 
           BFSTTT3, BFSTTTT4, BFSTTT5, BFSTTT6 = GetSpellTabInfo(i) 
           BFSTTT8[BFSTTT3] = {} 
--           for BFSHHH10 = 1, BFSTTT6 do 
           for t = 1, BFSTTT6 do
                local BFSTTT4 = GetSpellTexture(BFSTTT5+t, BOOKTYPE_SPELL) 
                local BFSTTT10, BFSTTT11 = GetSpellName(BFSTTT5+t, BOOKTYPE_SPELL) 
                local BFSTTT12 = IsSpellPassive(BFSTTT5+t, BOOKTYPE_SPELL) 
                local BFSTTT13, BFSHHH14, BFSHHH15 = GetSpellCooldown(BFSTTT5+t, BOOKTYPE_SPELL) 
                local BFSTTT14
                if (BFSTTT11) then 
                     BFSTTT14 = BFSTTT10.."("..BFSTTT11..")" 
                else 
                     BFSTTT14 = BFSTTT10 
                end 
--                BFSTTT8[BFSTTT3][BFSTTT15] = {}
                BFSTTT8[BFSTTT3][BFSTTT14] = {} 
                BFSTTT8[BFSTTT3][BFSTTT14]["spellName"] = BFSTTT10 
                BFSTTT8[BFSTTT3][BFSTTT14]["subSpellName"] = BFSTTT11 
                BFSTTT8[BFSTTT3][BFSTTT14]["texture"] = BFSTTT4 
                BFSTTT8[BFSTTT3][BFSTTT14]["isPassive"] = BFSTTT12 
                BFSTTT8[BFSTTT3][BFSTTT14]["name"] = BFSTTT14
                BFSTTT8[BFSTTT3][BFSTTT14]["id"] = BFSTTT5+t 
                BFSTTT8[BFSTTT3][BFSTTT14]["bookType"] = BOOKTYPE_SPELL 
            end 
       end 
   end 
    return BFSTTT8
end 

function BFSHHH8() 
    local BFSHHH5 = BFSHHH9() 
    local BFSTTT16 = {} 
    for BFSHHH16, BFSTTT17 in BFSHHH5 do 
        if (BFSHHH6[BFSHHH16]) then                              --学过
            for BFSHHH12, BFSTTT18 in BFSTTT17 do 
                if (not BFSHHH6[BFSHHH16][BFSHHH12]) then 
                     BFSTTT16[BFSHHH12] = BFSTTT18 
                end 
            end  
        else                                                     --未学过
            for BFSHHH12, BFSTTT18 in BFSTTT17 do 
                BFSTTT16[BFSHHH12] = BFSTTT18 
            end 
        end 
    end 
    if (BFSHHH7 and BFSHHH1[BIGFOOT_SPELL_EVENT_NEW]) then      --什么意思？
        for BFSHHH16, BFSTTT17 in BFSTTT16 do 
            for BFSHHH4, BFSHHH11 in BFSHHH1[BIGFOOT_SPELL_EVENT_NEW] do 
                BFSHHH11(BFSTTT17) 
            end 
        end 
    end 
      BFSHHH6 = BFSHHH5 
end 

--注册
function BigFootSpells_RegisterNewSpellSink(BFSTTT1, BFSHHH11) 
        local BFSHHH13 = getglobal(BFSHHH11) 
        if (type(BFSHHH13) == "function") then 
            if ( not BFSHHH1[BFSTTT1]) then 
                 BFSHHH1[BFSTTT1] = {} 
            end 
            BFSHHH1[BFSTTT1][BFSHHH11] = BFSHHH13 
        end 
end

--反注册 
function BigFootSpells_UnregisterNewSpellSink(BFSTTT1, BFSHHH11) 
    if (BFSHHH1[BFSTTT1] and BFSHHH1[BFSTTT1][BFSHHH11]) then 
        BFSHHH1[BFSTTT1][BFSHHH11] = nil 
    end 
end 

--从名字获取ID
function BigFootSpell_GetSpellIdFromName(BFSTTT3, BFSHHH2) 
    for BFSHHH16, BFSTTT17 in BFSHHH6 do 
         for BFSHHH12, BFSTTT18 in BFSTTT17 do 
             if (BFSHHH12 == BFSTTT3) then 
               return BFSTTT18["id"] 
             end 
         end 
    end 
end

