vanilla-wow-addons – Rev 1

Subversion Repositories:
Rev:
local util = Utility_Class:New()

FBEventHandlers["VARIABLES_LOADED"] =
        function(event)
        -- Saved Variables available here
        -- Convert from old individual global options to a table.
                if FBFirstUse   then FBToggles["firstuse"] = FBFirstUse end
                if FBVerbose    then FBToggles["verbose"] = FBVerbose end
                if FBNoTooltips then FBToggles["notooltips"] = FBNoTooltips end
                if FBSafeLoad   then FBToggles["loadtype"] = "safe" end
                if FBFastLoad   then FBToggles["loadtype"] = "fast" end
                if not FBToggles["loadtype"] then FBToggles["loadtype"] = "std" end
                if not FBToggles["dropdown"] then FBToggles["dropdown"] = 5 end
                if not FBToggles["tooltipinfocolor"] then FBToggles["tooltipinfocolor"] = { r=1, g=1, b=1 } end
                
                if FBToggles["firstuse"]  == 0 then
                        FlexBar_LoadDefaults();
                end
                util:Print(format("FlexBar V%.3f loaded.  Type /flexbar for usage", FlexBarVersion));
                FBLoadProfileDialog:Hide()
                if FBToggles["loadtype"] == "safe" then
                        LoadProfileButton:Show()
                end
        end

FBEventHandlers["PLAYER_ENTERING_WORLD"] = 
        function()
        -- moved profile load timer here to avoid setting group bounds while GetRight etc return bad values
        -- if profile already loaded, return.
                if FBProfileLoaded then return end
        -- localize strings
                FBLocalize()
                local delay=10
                if FBToggles["loadtype"] == "fast" then
                        delay=1
                end
                FBTimers["loadprofile"] = Timer_Class:New(delay, nil, 
                "Flexbar settings loading", nil, FB_LoadProfile)
        end

FBEventHandlers["PLAYER_ENTER_COMBAT"] =
        function(event)
        -- self explanatory - raise event for player initiating auto-attack
                if not FBProfileLoaded then return end
                if FBEventToggles["meleecheck"] == "off" then return end
                FB_RaiseEvent("EnterCombat")
                FBConditionalState["incombat"] = true
        end
        
FBEventHandlers["PLAYER_LEAVE_COMBAT"] = 
        function(event)
        -- raise event for player turning autoattack off
                if not FBProfileLoaded then return end
                if FBEventToggles["meleecheck"] == "off" then return end
                FB_RaiseEvent("LeaveCombat")
                FBConditionalState["incombat"] = nil
        end
        
FBEventHandlers["PLAYER_REGEN_ENABLED"] = 
        function(event)
        -- raise event for lose aggro (which is when regen is re-enabled)
                if not FBProfileLoaded then return end
                if FBEventToggles["aggrocheck"] == "off" then return end
                FB_RaiseEvent("LoseAggro")
                FBConditionalState["hasaggro"] = nil
        end
        
FBEventHandlers["PLAYER_REGEN_DISABLED"] = 
        function(event)
        -- raise event for gain aggro (player regen is disabled when you have aggro)
                if not FBProfileLoaded then return end
                if FBEventToggles["aggrocheck"] == "off" then return end
                FB_RaiseEvent("GainAggro")
                FBConditionalState["hasaggro"] = true
        end

local nonraidunits = {
        ["player"]      = true,
        ["party1"]      = true,
        ["party2"]      = true,
        ["party3"]      = true,
        ["party4"]      = true,
        ["pet"]         = true,
        ["partypet1"] = true,
        ["partypet2"]   = true,
        ["partypet3"]   = true,
        ["partypet4"]   = true,
        ["target"]              = true,
}
FBEventHandlers["UNIT_AURA"] = 
        function(event)
                -- lost/gain buff - raise event.  Note, losing buffs to dieing doesn't trigger this.
                -- also, some forms do not trigger this when they fade apparently
                if FBToggles["raidsafe"] and not nonraidunits[arg1] then return end
                FB_CheckAllBuffs(arg1)
                if arg1 == "pet" then FB_MimicPetButtons() end
        end
        
FBEventHandlers["CHAT_MSG_COMBAT_SELF_MISSES"] = 
        function(event)
        -- pretty sure all these are right - if anyone has trouble getting the right reactions I'll revisit
                if not FBProfileLoaded then return end
                if FBEventToggles["missevents"] == "off" then return end
                if strfind(arg1, "dodges") then
                        FB_RaiseEvent("PlayerMiss", "dodge")
                elseif strfind(arg1, "parries") then
                        FB_RaiseEvent("PlayerMiss", "parry")
                elseif strfind(arg1, "blocks") then
                        FB_RaiseEvent("PlayerMiss", "block")
                else
                        FB_RaiseEvent("PlayerMiss", "miss")
                end
        end
        
FBEventHandlers["CHAT_MSG_SPELL_SELF_DAMAGE"] = 
        function(event) 
        -- pretty sure all these are right - if anyone has trouble getting the right reactions I'll revisit 
        if not FBProfileLoaded then return end 
        if FBEventToggles["missevents"] == "off" then return end 
        if strfind(arg1, "was dodged") then 
                FB_RaiseEvent("PlayerMiss", "dodge") 
        elseif strfind(arg1, "parries") then 
                FB_RaiseEvent("PlayerMiss", "parry") 
        elseif strfind(arg1, "blocks") then 
                FB_RaiseEvent("PlayerMiss", "block") 
        else 
                FB_RaiseEvent("PlayerMiss", "miss") 
        end 
end 

FBEventHandlers["CHAT_MSG_COMBAT_CREATURE_VS_SELF_MISSES"] = 
        function(event)
        -- Same as above
                if not FBProfileLoaded then return end
                if FBEventToggles["missevents"] == "off" then return end
                if strfind(arg1, "dodge") then
                        FB_RaiseEvent("TargetMiss", "dodge")
                elseif strfind(arg1, "parry") then
                        FB_RaiseEvent("TargetMiss", "parry")
                elseif strfind(arg1, "block") then
                        FB_RaiseEvent("TargetMiss", "block")
                else
                        FB_RaiseEvent("TargetMiss", "miss")
                end
        end
        
FBEventHandlers["UNIT_HEALTH"] = 
        function(event)
        -- raise events for the health of available unit codes dropping by 10% increments, and
        -- climbing by the same increments.  Available units are player, party1-party4, pet, target, mouseover
                if FBToggles["raidsafe"] and not nonraidunits[arg1] then return end
                if not FBProfileLoaded then return end
                if FBEventToggles["healthevents"] == "off" then return end
                local list = FBEventToggleInfo["healthevents"][FBEventToggles["healthevents"].."list"]
                if FBEventToggles["healthevents"] == "low" and not list[arg1] then return end
                FB_CheckTextSub()
                local hppercent = UnitHealth(arg1)/UnitHealthMax(arg1) * 100
                if FBLastHealth[arg1] then
                        local index
                        for index = 100, 10, -10 do
                                if FBLastHealth[arg1] >= index and hppercent < index then
                                        FB_RaiseEvent("HealthBelow" .. index, arg1)
                                end
                        end
                        for index = 10, 90, 10 do
                                if FBLastHealth[arg1] <= index and hppercent > index then
                                        FB_RaiseEvent("HealthAbove" .. index, arg1)
                                end
                        end
                        if FBLastHealth[arg1] <=99 and hppercent > 99 then
                                FB_RaiseEvent("HealthFull", arg1)
                        end
                end
                FBLastHealth[arg1] = hppercent
        end
        
FBEventHandlers["UNIT_MANA"] = 
        function(event)
        -- raise events for the health of available unit codes dropping by 10% increments, and
        -- climbing by the same increments.  Available units are player, party1-party4, pet, target, mouseover
                if FBToggles["raidsafe"] and not nonraidunits[arg1] then return end
                if not FBProfileLoaded then return end
                if FBEventToggles["manaevents"] == "off" then return end
                local list = FBEventToggleInfo["manaevents"][FBEventToggles["manaevents"].."list"]
                if FBEventToggles["manaevents"] == "low" and not list[arg1] then return end
                FB_CheckTextSub()
                local manapercent = UnitMana(arg1)/UnitManaMax(arg1) * 100
                if FBLastMana[arg1] then
                        local index
                        for index = 100, 10, -10 do
                                if FBLastMana[arg1] >= index and manapercent < index then
                                        FB_RaiseEvent("ManaBelow" .. index, arg1)
                                end
                        end
                        for index = 10, 90, 10 do
                                if FBLastMana[arg1] <= index and manapercent > index then
                                        FB_RaiseEvent("ManaAbove" .. index, arg1)
                                end
                        end
                        if FBLastMana[arg1] <=99 and manapercent > 99 then
                                FB_RaiseEvent("ManaFull", arg1)
                        end
                end
                FBLastMana[arg1] = manapercent  
        end

FBEventHandlers["UNIT_RAGE"] = FBEventHandlers["UNIT_MANA"]
FBEventHandlers["UNIT_ENERGY"] = FBEventHandlers["UNIT_MANA"]
        
FBEventHandlers["ACTIONBAR_PAGE_CHANGED"] = 
        function(event)
        -- Action bar changed - allows syncing group to action bar
                if not FBProfileLoaded then return end
                if FBEventToggles["actionbarpage"] == "off" then return end
                FB_RaiseEvent("ActionBarPage", CURRENT_ACTIONBAR_PAGE)
        end
        
FBEventHandlers["SPELLS_CHANGED"] = 
        function(event)
        -- Reload spell info on spells changing
                FB_GetSpellInfo()
        end

FBEventHandlers["PLAYER_COMBO_POINTS"] = 
        function(event)
        -- Raise event for a change in combo points
                if not FBProfileLoaded then return end
                FB_CheckTextSub()
                if FBEventToggles["comboevents"] == "off" then return end
                FB_RaiseEvent("ComboPoints",GetComboPoints())
        end

FBEventHandlers["PLAYER_GAINED_CONTROL"] = 
        function(event)
        -- my tester for Gained Control - hopefully can use for fear etc..
                if not FBScripts[event] then FBScripts[event] = "" end
                arg1 = tostring(arg1)
                arg2 = tostring(arg2)
                arg3 = tostring(arg3)
                arg4 = tostring(arg4)
                arg5 = tostring(arg5)
                local text = GetTime () .. ": arg1=%s;arg2=%s;arg3=%s;arg4=%s;arg5=%s\n"
                FBScripts[event] = FBScripts[event] .. text
        end

FBEventHandlers["PLAYER_LOST_CONTROL"] = 
        function(event)
        -- my tester for Lost Control - hopefully can use for fear etc..
                if not FBScripts[event] then FBScripts[event] = "" end
                arg1 = tostring(arg1)
                arg2 = tostring(arg2)
                arg3 = tostring(arg3)
                arg4 = tostring(arg4)
                arg5 = tostring(arg5)
                local text = GetTime () .. ": arg1=%s;arg2=%s;arg3=%s;arg4=%s;arg5=%s\n"
                FBScripts[event] = FBScripts[event] .. text
        end

FBEventHandlers["BAG_UPDATE"] = 
        function(event)
        -- Raise event for bag contents changing
                if not FBProfileLoaded then return end
                FB_CheckAutoItems()
                if FBAutoItemsFrame:IsVisible() then
                        FB_DisplayAutoItems()
                end
                FB_CheckTextSub()
        end
        
FBEventHandlers["UNIT_INVENTORY_CHANGED"] = 
        function(event)
                if not FBProfileLoaded then return end
                FB_CheckAutoItems()
                if FBAutoItemsFrame:IsVisible() then
                        FB_DisplayAutoItems()
                end
        end

FBEventHandlers["UPDATE_INVENTORY_ALERTS"] = 
        function(event)
                if not FBProfileLoaded then return end
                FB_CheckAutoItems()
                if FBAutoItemsFrame:IsVisible() then
                        FB_DisplayAutoItems()
                end
        end

FBEventHandlers["ACTIONBAR_SLOT_CHANGED"] = 
        function(event)
                if not FBProfileLoaded then return end
                FB_CheckAutoItems()
                if FBAutoItemsFrame:IsVisible() then
                        FB_DisplayAutoItems()
                end
        end

FBEventHandlers["MERCHANT_CLOSED"] = 
        function(event)
                if not FBProfileLoaded then return end
                FB_CheckAutoItems()
                if FBAutoItemsFrame:IsVisible() then
                        FB_DisplayAutoItems()
                end
        end

FBEventHandlers["MERCHANT_UPDATE"] = 
        function(event)
                if not FBProfileLoaded then return end
                FB_CheckAutoItems()
                if FBAutoItemsFrame:IsVisible() then
                        FB_DisplayAutoItems()
                end
        end

FBEventHandlers["UNIT_COMBAT"] = 
        function(event)
        -- Combat events - replace miss events
                if FBToggles["raidsafe"] and not nonraidunits[arg1] then return end
                if not FBProfileLoaded then return end
                if FBEventToggles["combatevents"] == "off" then return end
                -- only raise/check player/target
                if arg1 ~= "player" and arg1 ~= "target" then return end
                if arg3 ~= "" then
                        FB_RaiseEvent(arg1.."Combat",tostring(arg3))
                        FBCombatTypes["'"..string.lower(arg3).."'"] = true
                else
                        FB_RaiseEvent(arg1.."Combat",tostring(arg2))
                        FBCombatTypes["'"..string.lower(arg2).."'"] = true
                end
        end
        
FBEventHandlers["PLAYER_TARGET_CHANGED"] = 
        function(event)
        -- Raise target changed events
        -- When UnitName("target") is nil we lost the old target
        -- when UnitName("target") is not nil we gained a new target
        -- arg1 contains the GetTime() * 1000 when we gain a target, nil otherwise
        --(DJE 8/16/05) Function altered to fix Duel targets being concidered friendly
        --(DJE 8/16/05) It would apear that WoW conciders Duel targets BOTH friendly and hostile
        --(DJE 8/16/05) I think that in every case hostility would be more of a concern than friendliness
        --(DJE 8/16/05) So the order of the checks were swaped
                FBLastTargetTarget = nil
                FBLastTargetTargetName = nil
                if not FBProfileLoaded then return end
                if FBEventToggles["targetcheck"] == "off" then return end

                local name = UnitName("target")
                local reaction
                if name then
                        --Order of checking hostile and friendly switched (DJE 8/16/05)
                        if UnitIsEnemy("player","target") then
                                reaction = "hostile"
                        elseif UnitIsFriend("player","target") then
                                reaction = "friendly"
                        else
                                reaction = "neutral"
                        end
                        FB_RaiseEvent("GainTarget", reaction)
--                      FBTimers["targettarget"]:Start()
                else
                        FB_RaiseEvent("LostTarget", reaction)
--                      FBTimers["targettarget"]:Pause()
                end
        end

FBEventHandlers["UNIT_PET"] = 
        function(event)
        -- raise events for party/raid members getting pets
                if FBToggles["raidsafe"] and not nonraidunits[arg1] then return end
                if not FBProfileLoaded then return end
                if arg1 == "target" or arg1 == "mouseover" or arg1 == "npc" or arg1 == "NPC" then return end
                if FBEventToggles["petcheck"] == "off" then return end
                if not strfind(arg1,"pet") then -- this event fires 3 times on a pet summon, 2 times with pet and once with player
                        local _,_,base,num = string.find(arg1,"(%a+)(%d+)")
                        local pet
                        if arg1 == "player" then 
                                pet = "pet" 
                        else
                                pet = base .. "pet" .. num
                        end
                        -- raise the event after a small delay to let UnitCreatureFamily return right info
                        FBTimers["petcheck"..GetTime()] = 
                                Timer_Class:New(.5,false,nil,nil,function() FB_CheckPets(pet) end)
                end
        end

FBEventHandlers["UNIT_FLAGS"] = 
        function(event)
        -- change pet buttons
                if arg1 ~= "pet" then return end
                FB_MimicPetButtons()
        end

FBEventHandlers["PET_BAR_UPDATE"] = 
        function(event)
        -- change pet buttons
                FB_MimicPetButtons()
        end

FBEventHandlers["PET_BAR_UPDATE_COOLDOWN"] = 
        function(event)
        -- change pet buttons
                FB_MimicPetButtons()
        end

FBEventHandlers["PARTY_MEMBERS_CHANGED"] = 
        function(event)
        -- Check for different party members
                if not FBProfileLoaded then return end
                if FBEventToggles["groupcheck"] == "off" then return end
                local index, value, list
                list = FBEventToggleInfo["groupcheck"][FBEventToggles["groupcheck"] .."list"]
                if not list then return end
                for index, value in pairs(list) do
                        local name = UnitName(index)
                        if name and not FBGroupmates[index] then
                                FB_RaiseEvent("GainPartymate", index)
                        end
                        if not name and FBGroupmates[index] then
                                FB_RaiseEvent("LosePartyMate", index)
                        end
                        
                        FBGroupmates[index] = name
                end
        end

FBEventHandlers["PLAYER_AURAS_CHANGED"] = 
        function(event)
        -- check new aura
                local form = "none"
                if FBLastform then
                        local index
                        for index = 1, GetNumShapeshiftForms() do
                                local _, name, active = GetShapeshiftFormInfo(index)
                                if active then
                                        form = name
                                        break
                                end
                        end
                end
                if FBLastform ~= form then
                        if FBLastform ~= "none" then
                                FB_RaiseEvent("LoseAura", FBLastform)
                        end
                        if form ~= "none" then
                                FB_RaiseEvent("GainAura", form)
                                FBBuffs["auras"]["'"..form.."'"] = true
                        end
                end
                FBLastform = form
                -- Shirtan doing tracking events.....
                if not (GetTrackingTexture() == nil) then 
                        tracking = GetTrackingTexture()
                        if not (tracking == FBLastTracking) then
                                FBLastTracking=tracking
                                for k,v in pairs (FBTrackingList) do
                                        if ( tracking == v) then
                                                FB_RaiseEvent("trackingchanged", k)
                                                break
                                        end
                                end
                        end
                else
                        if not (tracking == FBLastTracking) then
                                FBLastTracking=tracking
                                FB_RaiseEvent("trackingchanged", "none")
                        end     
                end             
                -- /Tracking events.    
        end
        
FBEventHandlers["some event"] = 
        function(event)
        -- my tester for new events to see what I have to work with.
                util:Print(event)
                util:Print(arg1)
                util:Print(arg2)
                util:Print(arg3)
                util:Print(arg4)
                util:Print(arg5)
        end