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