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