------------------------------ -- Are you local? -- ------------------------------ local LC = AceLibrary("AceLocale-2.2"):new("BigWigs") local BZ = AceLibrary("Babble-Zone-2.2") local withcore = {} local inzone = {} local zonelist = {} local function Split(str, sep) local x, y = string.find(str, sep) or 0, string.len(sep) or 1 return tonumber(string.sub(str, 1, x - 1)) or string.sub(str, 1, x - 1), tonumber(string.sub(str, x + y)) or string.sub(str, x + y) end local function Trim(str) str = string.gsub(str, "^%s*", "") str = string.gsub(str, "%s*$", "") return str end local function Explode(str, sep) local a, b = Split(str, sep) if not b or b == "" then return Trim(a) end if not string.find(b, sep) then return Trim(a), Trim(b) end return Trim(a), Explode(b, sep) end ------------------------------ -- Addon Declaration -- ------------------------------ BigWigsLoD = AceLibrary("AceAddon-2.0"):new("AceEvent-2.0") ------------------------------ -- Initialization -- ------------------------------ function BigWigsLoD:OnInitialize() self:InitializeLoD() end function BigWigsLoD:OnEnable() self:RegisterEvent("BigWigs_CoreEnabled") self:RegisterEvent("ZONE_CHANGED_NEW_AREA") self:RegisterEvent("CHAT_MSG_SYSTEM") self:RegisterEvent("BigWigs_JoinedGroup") self:RegisterEvent("BigWigs_LeftGroup") if AceLibrary("AceEvent-2.0"):IsFullyInitialized() then self:ZONE_CHANGED_NEW_AREA() else self:RegisterEvent("AceEvent_FullyInitialized", "ZONE_CHANGED_NEW_AREA") end end ------------------------------ -- Event Handlers -- ------------------------------ function BigWigsLoD:BigWigs_CoreEnabled() local loaded = false for k,v in pairs( withcore ) do if not IsAddOnLoaded( v ) then loaded = true LoadAddOn( v ) end end withcore = {} -- Fire an event to have the target monitor check it's stuff if loaded then self:TriggerEvent("BigWigs_ModulePackLoaded") end end function BigWigsLoD:ZONE_CHANGED_NEW_AREA() self:LoadZone( GetRealZoneText() ) end function BigWigsLoD:CHAT_MSG_SYSTEM( msg ) if string.find(msg, "^"..ERR_RAID_YOU_LEFT) then self:TriggerEvent("BigWigs_LeftGroup") elseif string.find(msg, ERR_RAID_YOU_JOINED) then self:TriggerEvent("BigWigs_JoinedGroup") end end function BigWigsLoD:BigWigs_JoinedGroup() BigWigs:ToggleActive(true) end function BigWigsLoD:BigWigs_LeftGroup() BigWigs:ToggleActive(false) end ------------------------------ -- Utility Functions -- ------------------------------ function BigWigsLoD:InitializeLoD() local numAddons = GetNumAddOns() for i = 1, numAddons do if not IsAddOnLoaded(i) and IsAddOnLoadOnDemand(i) then local meta = GetAddOnMetadata(i, "X-BigWigs-LoadInZone") if meta then local ignorezone = string.find( meta, LC["Outdoor Raid Bosses Zone"] ) for k, v in pairs({Explode(meta, ",")}) do local zone if BZ:HasTranslation(v) then zone = BZ[v] end -- elseif LC:HasTranslation(v) then zone = LC[v] end if zone then if not inzone[zone] then inzone[zone] = {} end table.insert( inzone[zone], i) if not ignorezone then zonelist[zone] = true else if not zonelist[LC["Other"]] then zonelist[LC["Other"]] = {} end zonelist[LC["Other"]][zone] = true end end end end meta = GetAddOnMetadata(i, "X-BigWigs-LoadWithCore") if meta then -- register this addon for loading with core table.insert( withcore, i ) end end end end function BigWigsLoD:LoadZone( zone ) if inzone[zone] then local loaded = false for k,v in pairs( inzone[zone] ) do if not IsAddOnLoaded( v ) then loaded = true LoadAddOn( v ) end end inzone[zone] = nil zonelist[zone] = nil if loaded then self:TriggerEvent("BigWigs_ModulePackLoaded", zone) end end end function BigWigsLoD:GetZones() return zonelist end