vanilla-wow-addons – Rev 1

Subversion Repositories:
Rev:
FORMS_EN = {"Bear Form", "Cat Form", "Moonkin Form", "Travel Form", "Aquatic Form"}
PROWL_EN = "Prowl"
CHARG_EN = "Feral Charge"

FORMS_FR = {"Forme d\226\128\153ours", "Forme de f\195\169lin", "Forme de s\195\169l\195\169nien", "Forme de voyage", "Forme aquatique"}
PROWL_FR = "R\195\180der"
CHARG_FR = "Charge farouche"

FORMS_DE = {"B\195\164rengestalt", "Katzengestalt", "Moonkingestalt", "Reisegestalt", "Wassergestalt"}
PROWL_DE = "Schleichen"
CHARG_DE = "Wilde Attacke"

Human = "human"

PROWL = "\Ability_Ambush"

Prowler_Forms = {}

local maxspells
local prowl_id
local charg_id
local prev_ab
local locked
local charg_toggle

function SearchForm(form)
        form = string.lower(form)
        local bear = string.lower(Bear)
        if (GetLocale() == 'frFR') then
                if string.find(bear, form) then
                        form = bear
                end
        else
                if string.find(form, bear) then
                        form = bear
                end
        end
        return Prowler_Forms[form].pos
end

function CurrentForm()
        return Prowler_Forms["current"]
end

local function ActiveForm()
        local i = 1
        while (i <= GetNumShapeshiftForms()) do
                local _, name, active, castable = GetShapeshiftFormInfo(i)
                if active then
                        return name
                end
                i = i + 1
        end
        return Human
end

local function Init_Forms_Table()
        for i = 1, getn(FORMS) do
                local form = string.lower(FORMS[i])
                Prowler_Forms[form] = {name = "", pos = 0}
        end
end

local function Create_Forms_Table()
        local i = 1;
        Prowler_Forms["current"] = string.lower(Human)
        while (i <= GetNumShapeshiftForms()) do
                local _, name1, active1 = GetShapeshiftFormInfo(i);
                name1 = string.lower(name1)
                local j = 0
                if (GetLocale() == 'frFR') then
                        repeat
                                j = j + 1
                                form = string.lower(FORMS[j])
                        until (string.find(form,name1) or j >= getn(FORMS))
                        if (string.find(form,name1)) then 
                                Prowler_Forms[form] = {name = form, pos = i}
                                if (active1) then
                                        Prowler_Forms["current"] = form
                                end
                        end
                else
                        repeat
                                j = j + 1
                                form = string.lower(FORMS[j])
                        until (string.find(name1,form) or j >= getn(FORMS))
                        if (string.find(name1,form)) then 
                                Prowler_Forms[form] = {name = form, pos = i}
                                if (active1) then
                                        Prowler_Forms["current"] = form
                                end
                        end
                end
                i = i + 1
        end
end

local function Update_Forms_Table()
        form = string.lower(ActiveForm())
        local bear = string.lower(Bear)
        if (GetLocale() == 'frFR') then
                if string.find(bear, form) then
                        form = bear
                end
        else
                if string.find(form, bear) then
                        form = bear
                end
        end
        Prowler_Forms["current"] = string.lower(form);
end

local function FindProwl()
        local i = 0
        while GetPlayerBuffTexture(i) do
                local icon = GetPlayerBuffTexture(i)
                if (string.find(icon,PROWL) )then 
                        return true
                end
                i = i + 1
                if i > 50 then break end
        end
        return false
end

local function GetNumBuffs()
        local i = 0
        while GetPlayerBuffTexture(i) do
                i = i + 1
        end
        return i
end

local function MaxSpells()
        local i = 1
        local total_spells = 0
        local num_tabs = GetNumSpellTabs()
        while (i <= num_tabs) do
                local _,_,_,numSpells = GetSpellTabInfo(i)
                total_spells = total_spells + numSpells
                i = i + 1;
        end
        return total_spells
end

local function SearchBestSpell(msg)
        local i = 0
        local found = false
        while (not found) do
                i = i + 1
                name = GetSpellName(i,'spell')
                if (name == msg) then
                        found = true
                end
                if (i > maxspells) then
                        break
                end
        end
        if (not found) then
                return -1
        end
        local j = i
        local best_spell = false
        while (not best_spell) do
                local name2,_ = GetSpellName(j+1,'spell')
                if (msg == name2) then
                        j = j + 1
                else
                        best_spell = true
                end
        end
        return j
end

local function Prowl_Print(msg)
        if (not DEFAULT_CHAT_FRAME) then
                return
        end
        DEFAULT_CHAT_FRAME:AddMessage(msg)
end

function Prowler_OnLoad()
        _,lclass = UnitClass("player")
        if (lclass ~= "DRUID") then
                return
        end
        
        Prowl = PROWL_EN
        Charg = CHARG_EN
        Bear = string.lower(FORMS_EN[1])
        Cat = string.lower(FORMS_EN[2])
        Moon = string.lower(FORMS_EN[3])
        Travel = string.lower(FORMS_EN[4])
        Aqua = string.lower(FORMS_EN[5])
        FORMS = FORMS_EN
        if (GetLocale() == 'frFR') then
                Prowl = PROWL_FR
                Charg = CHARG_FR
                Bear = string.lower(FORMS_FR[1])
                Cat = string.lower(FORMS_FR[2])
                Moon = string.lower(FORMS_FR[3])
                Travel = string.lower(FORMS_FR[4])
                Aqua = string.lower(FORMS_FR[5])
                FORMS = FORMS_FR
        elseif (GetLocale() == 'deDE') then
                Prowl = PROWL_DE
                Charg = CHARG_DE
                Bear = string.lower(FORMS_DE[1])
                Cat = string.lower(FORMS_DE[2])
                Moon = string.lower(FORMS_DE[3])
                Travel = string.lower(FORMS_DE[4])
                Aqua = string.lower(FORMS_DE[5])
                FORMS = FORMS_DE
        end
        
        BINDING_HEADER_Prowler = 'Prowler'
        BINDING_NAME_Prowler_Aquatic = 'Aquatic Form'   
        BINDING_NAME_Prowler_Bear = 'Bear & Charge'
        BINDING_NAME_Prowler_Prowl = 'Cat & Prowl'      
        BINDING_NAME_Prowler_Moon = 'Moonkin Form'
        BINDING_NAME_Prowler_Human = 'Humanoid'
        BINDING_NAME_Prowler_Travel = 'Travel Form'
        BINDING_NAME_Prowler_Best = 'Best From'

        this:RegisterEvent("VARIABLES_LOADED");
        this:RegisterEvent("PLAYER_AURAS_CHANGED");
        this:RegisterEvent('SPELLS_CHANGED');

        SLASH_PROWLER1 = "/Prowler"
        SlashCmdList["PROWLER"] = function(msg)
                Prowler_Cmd(msg);
        end
        
        maxspells = MaxSpells()
        prowl_id = SearchBestSpell(Prowl);
        charg_id = SearchBestSpell(Charg);
        Init_Forms_Table()
        Create_Forms_Table()
        Update_Forms_Table()
        
        tinsert(UISpecialFrames,"Prowler1");
end

function Prowler_OnClick1(arg1)
        if (Prowler1_CheckButton1:GetChecked()) then
                toggle = true;
                Prowler1_CheckButton1Text:SetText("Prowler Enabled")
                Prowler1_CheckButton1Text:SetTextColor(0,1,0)
        else
                toggle = false;
                Prowler1_CheckButton1Text:SetText("Prowler Disabled")
                Prowler1_CheckButton1Text:SetTextColor(1,0,0)
        end
end

function Prowler_OnClick2(arg1)
        local frame = getglobal("Prowler1")
        if (Prowler1_CheckButton2:GetChecked()) then
                frame.isLocked = 1;
                locked = 1;
                Prowler1_CheckButton2Text:SetText("Prowler Locked")
                Prowler1_CheckButton2Text:SetTextColor(0,1,0)
        else
                frame.isLocked = 0;
                locked = 0;
                Prowler1_CheckButton2Text:SetText("Prowler Unlocked")
                Prowler1_CheckButton2Text:SetTextColor(1,0,0)
        end
end

function Prowler_OnClick3(arg1)
        if (Prowler1_CheckButton3:GetChecked()) then
                prev = true
                Prowler1_CheckButton3Text:SetText("Using Last AB")
                Prowler1_CheckButton3Text:SetTextColor(0,1,0)
        else
                prev = false
                Prowler1_CheckButton3Text:SetText("Using Main AB")
                Prowler1_CheckButton3Text:SetTextColor(1,0,0)
        end
end

function Prowler_OnClick4(arg1)
        if (Prowler1_CheckButton4:GetChecked()) then
                MA_toggle = true
                Prowler1_CheckButton4Text:SetText("MoveAnything! Fix on")
                Prowler1_CheckButton4Text:SetTextColor(0,1,0)
        else
                MA_toggle = false
                Prowler1_CheckButton4Text:SetText("MoveAnything! Fix off")
                Prowler1_CheckButton4Text:SetTextColor(1,0,0)
        end
end

function Prowler_OnClick5(arg1)
        if (Prowler1_CheckButton5:GetChecked()) then
                charg_toggle = true
                Prowler1_CheckButton5Text:SetText("Bear & Charge")
                Prowler1_CheckButton5Text:SetTextColor(0,1,0)
        else
                charg_toggle = false
                Prowler1_CheckButton5Text:SetText("Only Bear")
                Prowler1_CheckButton5Text:SetTextColor(1,0,0)
        end
end

function Prowler_InitSlider1(slider,num)
        sl = getglobal(slider)
        if (sl:GetName() == "Prowler1_Slider1") then
                sl.tooltipText = "Set the Main Actionbar";
        elseif (sl:GetName() == "Prowler1_Slider2") then
                sl.tooltipText = "Set the Prowl Actionbar";
        end
        getglobal(slider .. "Low"):SetText("1");
        getglobal(slider .. "High"):SetText("7");
        getglobal(sl:GetName()):SetValue(num);
        getglobal(slider .. "Text"):SetText(sl:GetValue());
end

function Prowler_InitSlider2(slider,num)
        sl = getglobal(slider)
        if (sl:GetName() == "Prowler1_Slider3") then
                sl.tooltipText = "Set how the Cat Keybind will work";
        end
        getglobal(slider .. "Low"):SetText("");
        getglobal(slider .. "High"):SetText("");
        getglobal(sl:GetName()):SetValue(num);
        if (cat_mode == 1) then
                getglobal(sl:GetName().."Text"):SetText("Cat Only");
        elseif (cat_mode == 2) then
                getglobal(sl:GetName().."Text"):SetText("Prowl Only");
        elseif (cat_mode == 3) then
                getglobal(sl:GetName().."Text"):SetText("Prowl and Unprowl");
        end
end

function Prowler_Prowl()
        if CurrentForm() == string.lower(Cat) then
                if (cat_mode == 2) then
                        if (GetSpellCooldown(prowl_id,1) == 0) and (not FindProwl()) then
                                CastSpell(prowl_id,1)
                        end
                elseif (cat_mode == 3) then
                        if (GetSpellCooldown(prowl_id,1) == 0) or FindProwl() then
                                CastSpell(prowl_id,1)
                        end
                end
        else
                Shapeshift(Cat)
        end
end

function Prowler_Bear()
        if CurrentForm() == string.lower(Bear) then
                if (charg_id ~= -1) then
                        if (GetSpellCooldown(charg_id,1) == 0) and (charg_toggle == true) then
                                CastSpell(charg_id,1)
                        end
                end
        else
                Shapeshift(Bear)
        end
end

function Shapeshift(form)
        local i = 1
        local thing
        form = string.lower(form)
        local current = string.lower(CurrentForm())
        if (UnitIsMounted("player")) then
                Dismount()
        else
                if (not string.find(current,form)) then
                        if (CurrentForm() == Human) then
                                thing = SearchForm(form)
                                if (thing ~= 0) then 
                                        CastShapeshiftForm(thing)
                                else
                                        Prowl_Print(form .. ' not found')
                                end
                        else
                                CastShapeshiftForm(SearchForm(CurrentForm()))
                        end
                end
        end
end
                
function Prowler_BestForm()
        if (MirrorTimer1:IsVisible()) then
                if (CurrentForm() ~= Aqua) then
                        Shapeshift(Aqua)
                end
        else
                if (CurrentForm() ~= Travel) then
                        Shapeshift(Travel)
                end
        end
end

local function Shapeshifted()
        local active = string.lower(ActiveForm())
        local bear = string.lower(Bear)
        local current = string.lower(CurrentForm())
        if (GetLocale() == 'frFR') then
                if string.find(bear, active) then
                        active = bear
                end
        else
                if string.find(active, bear) then
                        active = bear
                end
        end
        
        if (active ~= current) then
                return true
        else
                return false
        end
end

function Prowler_OnEvent(arg1)
        if (event == 'VARIABLES_LOADED') then
                if (not main_ab) then
                        main_ab = 1
                end
                if (not prowl_ab) then
                        prowl_ab = 2
                end
                if (not locked) then
                        locked = 1
                end
                if (not prev) then
                        prev = false;
                end
                if (not MA_toggle) then
                        MA_toggle = false
                end
                if (not charg_toggle) then
                        charg_toggle = true
                end
                if (not cat_mode) then
                        cat_mode = 3
                end
                prev_ab = main_ab
                Prowler_InitSlider1("Prowler1_Slider1",main_ab);
                Prowler_InitSlider1("Prowler1_Slider2",prowl_ab);
                Prowler_InitSlider2("Prowler1_Slider3",cat_mode);
                if (locked == 1) then
                        Prowler1.isLocked = 1;
                        Prowler1_CheckButton2Text:SetText("Prowler Locked")
                        Prowler1_CheckButton2Text:SetTextColor(0,1,0)
                else
                        Prowler1.isLocked = 0;
                        Prowler1_CheckButton2Text:SetText("Prowler Unlocked")
                        Prowler1_CheckButton2Text:SetTextColor(1,0,0)
                end
                if (prev == true) then
                        Prowler1_CheckButton3Text:SetText("Using Last AB")
                        Prowler1_CheckButton3Text:SetTextColor(0,1,0)
                else
                        Prowler1_CheckButton3Text:SetText("Using Main AB")
                        Prowler1_CheckButton3Text:SetTextColor(1,0,0)
                end
                if (toggle == true) then
                        Prowler1_CheckButton1Text:SetText("Prowler Enabled")
                        Prowler1_CheckButton1Text:SetTextColor(0,1,0)
                else
                        Prowler1_CheckButton1Text:SetText("Prowler Disabled")
                        Prowler1_CheckButton1Text:SetTextColor(1,0,0)
                end
                if (MA_toggle == true) then
                        Prowler1_CheckButton4Text:SetText("MoveAnything! Fix on")
                        Prowler1_CheckButton4Text:SetTextColor(0,1,0)
                else
                        Prowler1_CheckButton4Text:SetText("MoveAnything! Fix off")
                        Prowler1_CheckButton4Text:SetTextColor(1,0,0)
                end
                if (charg_toggle == true) then
                        Prowler1_CheckButton5Text:SetText("Bear & Charge")
                        Prowler1_CheckButton5Text:SetTextColor(0,1,0)
                else
                        Prowler1_CheckButton5Text:SetText("Bear Only")
                        Prowler1_CheckButton5Text:SetTextColor(1,0,0)
                end

                Prowler1_CheckButton1:SetChecked(toggle);
                Prowler1_CheckButton2:SetChecked(locked);
                Prowler1_CheckButton3:SetChecked(prev);
                Prowler1_CheckButton4:SetChecked(MA_toggle);
                Prowler1_CheckButton5:SetChecked(charg_toggle);
                Prowl_Print('Prowler Loaded. Main bar = ' .. main_ab .. ' Prowling bar = ' .. prowl_ab)
        end
        if (event == 'PLAYER_AURAS_CHANGED') then
                num_buff_1 = GetNumBuffs()
                if (num_buff_1 == num_buff_2) then
                        buffed = true
                end
                if (Shapeshifted() == true) then
                        Update_Forms_Table()
                        shifted = true
                        if (CurrentForm() == string.lower(Cat)) or (CurrentForm() == string.lower(Bear)) then
                                prev_ab = CURRENT_ACTIONBAR_PAGE
                        end
                end
                if (toggle == true) then
                        if (CurrentForm() == string.lower(Cat)) then
                                if (FindProwl()) then
                                        if (CURRENT_ACTIONBAR_PAGE ~= prowl_ab) then
                                                CURRENT_ACTIONBAR_PAGE = prowl_ab;
                                                ChangeActionBarPage();
                                        end
                                else
                                        if (CURRENT_ACTIONBAR_PAGE ~= 1) then
                                                CURRENT_ACTIONBAR_PAGE = 1;
                                                ChangeActionBarPage();
                                        end
                                end
                        elseif (CurrentForm() == Human) then
                                if (prev == true) then
                                        if (CURRENT_ACTIONBAR_PAGE ~= prev_ab) and (shifted) then
                                                CURRENT_ACTIONBAR_PAGE = prev_ab;
                                                ChangeActionBarPage();
                                        end
                                else
                                        if (CURRENT_ACTIONBAR_PAGE ~= main_ab) and (shifted) then
                                                CURRENT_ACTIONBAR_PAGE = main_ab;
                                                ChangeActionBarPage();
                                        end
                                end
                                if (MA_toggle == true) and buffed then
                                        ChangeActionBarPage()
                                end
                                shifted = false
                        elseif (CurrentForm() == string.lower(Bear)) then
                                if (CURRENT_ACTIONBAR_PAGE ~= 1) then
                                        CURRENT_ACTIONBAR_PAGE = 1;
                                        ChangeActionBarPage();
                                end
                        end
                end
                num_buff_2 = GetNumBuffs()
                buffed = false
        end
        if (event == 'SPELLS_CHANGED') then
                maxspells = MaxSpells();
                prowl_id = SearchBestSpell(Prowl);
                charg_id = SearchBestSpell(Charg);
                Create_Forms_Table()
                Update_Forms_Table()
        end
end

function Prowler_Cmd(msg)
        local frame = getglobal("Prowler1")
        if (frame) then
                if(  frame:IsVisible() ) then
                        frame:Hide();
                else
                        frame:Show();
                end
        end
end

Generated by GNU Enscript 1.6.5.90.