Erik L. Vonderscheer [11-24-08 - 00:42]
diff --git a/v1.1.32 release/.pkgmeta b/v1.1.32 release/.pkgmeta
new file mode 100644
index 0000000..a5a28ba
--- /dev/null
+++ b/v1.1.32 release/.pkgmeta
@@ -0,0 +1,12 @@
+package-as: TradeFilter
+
+externals:
+ Libs/LibRock-1.0: svn://svn.wowace.com/wow/librock-1-0/mainline/trunk
+ Libs/LibRockTimer-1.0: svn://svn.wowace.com/wow/librocktimer-1-0/mainline/trunk
+ Libs/LibRockDB-1.0: svn://svn.wowace.com/wow/librockdb-1-0/mainline/trunk
+ Libs/LibRockLocale-1.0: svn://svn.wowace.com/wow/librocklocale-1-0/mainline/trunk
+ Libs/LibRockEvent-1.0: svn://svn.wowace.com/wow/librockevent-1-0/mainline/trunk
+ Libs/LibRockHook-1.0: svn://svn.wowace.com/wow/librockhook-1-0/mainline/trunk
+ Libs/LibRockConsole-1.0: svn://svn.wowace.com/wow/librockconsole-1-0/mainline/trunk
+ Libs/LibRockConfig-1.0: svn://svn.wowace.com/wow/librockconfig-1-0/mainline/trunk
+ Libs/AceLibrary: svn://svn.wowace.com/wow/ace2/mainline/trunk/AceLibrary
diff --git a/v1.1.32 release/TradeFilter.lua b/v1.1.32 release/TradeFilter.lua
new file mode 100644
index 0000000..7a17e70
--- /dev/null
+++ b/v1.1.32 release/TradeFilter.lua
@@ -0,0 +1,508 @@
+--[[
+TradeFilter
+ Filter that shit!
+
+By Evonder (evonder@gmail.com) AKA: Networkerror
+
+Basic structure and code ripped from crashmstr (wowzn@crashmstr.com)
+ which was ripped from TasteTheNaimbow (Thank you Guillotine!)
+
+Versioning:
+ v1.1
+ - Added Configurable Channel Filtering
+ - Trade
+ - General
+ - LFG
+ -r16
+ - SAY Channel
+ -r21
+ - Release
+ -r27
+ - Fixed embeds.xml and .pkgmeta
+ v1.0
+ - Initial release for WotLK
+ - Added Custom Filter option
+
+* Copyright (c) 2008, Evonder
+* All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without
+* modification, are permitted provided that the following conditions are met:
+* * Redistributions of source code must retain the above copyright
+* notice, this list of conditions and the following disclaimer.
+* * Redistributions in binary form must reproduce the above copyright
+* notice, this list of conditions and the following disclaimer in the
+* documentation and/or other materials provided with the distribution.
+* * Neither the name of the <organization> nor the
+* names of its contributors may be used to endorse or promote products
+* derived from this software without specific prior written permission.
+*
+* THIS SOFTWARE IS PROVIDED BY <copyright holder> ''AS IS'' AND ANY
+* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+* DISCLAIMED. IN NO EVENT SHALL <copyright holder> BE LIABLE FOR ANY
+* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+--]]
+local L = Rock("LibRockLocale-1.0"):GetTranslationNamespace("TradeFilter")
+
+TradeFilter = Rock:NewAddon("TradeFilter", "LibRockDB-1.0", "LibRockConfig-1.0", "LibRockEvent-1.0", "LibRockHook-1.0", "LibRockTimer-1.0", "LibRockConsole-1.0")
+
+local MAJOR_VERSION = "1.1"
+local MINOR_VERSION = 000 + tonumber(("$Revision: 32 $"):match("%d+"))
+TradeFilter.version = MAJOR_VERSION .. "." .. MINOR_VERSION
+TradeFilter.date = string.sub("$Date: 2008-11-21 12:00:00 -0800 (Fri, 21 Nov 2008) $", 8, 17)
+
+TradeFilter:SetDatabase("TradeFilterDB")
+TradeFilter:SetDatabaseDefaults('profile', {
+ turnOn = true,
+ redirect = false,
+ debug = false,
+ filterSAY = false,
+ filterLFG = false,
+ filterGeneral = false,
+ filterTrade = true,
+ addfilter = false,
+ addfilter1 = "[lL][fF] [pP][oO][rR][tT]",
+ addfilter2 = "[lL][fF][mM]",
+ addfilter3 = "[bB][uU][yY][iI][nN][gG]",
+ filter = {
+ {"[wW][tT][bBsStT]",true},
+ {"[lL][fF][wWeE]",true},
+ {"[lL][fF][eE][nN][cC][hH][aA][nN][tT]",true},
+ {"[lL][fF] [eE][nN][cC][hH][aA][nN][tT]",true},
+ {"[lL][fF] [jJ][cC]",true},
+ {"[lL][fF] [dD][pP][sS]",true},
+ {"[lL][fF] [tT][aA][nN][kK]",true},
+ {"[lL][fF] [hH][eE][aA][lL][eE][rR]",true},
+ {"[lL][fF]%d[mM]?",true},
+ {"[lL][fF][gG]",true},
+ {"AH",true},
+ {"looking for work",true},
+ {"lockpick",true},
+ {"[sS][eE][lL][lL][iI][nN][gG]",true},
+ {"[bB][uU][yY][iI][nN][gG]",true},
+ {"3[vV]3",true},
+ {"5[vV]5",true},
+ }
+})
+
+function TradeFilter:GetAddFilter()
+ return self.db.profile.addfilter
+end
+
+function TradeFilter:SetAddFilter()
+ self.db.profile.addfilter = not self.db.profile.addfilter
+end
+
+function TradeFilter:GetAddFilter1()
+ return self.db.profile.addfilter1
+end
+
+function TradeFilter:SetAddFilter1(v)
+ self.db.profile.addfilter1 = ""..v..""
+end
+
+function TradeFilter:GetAddFilter2()
+ return self.db.profile.addfilter2
+end
+
+function TradeFilter:SetAddFilter2(v)
+ self.db.profile.addfilter2 = ""..v..""
+end
+
+function TradeFilter:GetAddFilter3()
+ return self.db.profile.addfilter3
+end
+
+function TradeFilter:SetAddFilter3(v)
+ self.db.profile.addfilter3 = ""..v..""
+end
+
+function TradeFilter:IsFilterSAY()
+ return self.db.profile.filterSAY
+end
+
+function TradeFilter:ToggleFilterSAY()
+ self.db.profile.filterSAY = not self.db.profile.filterSAY
+end
+
+function TradeFilter:IsFilterLFG()
+ return self.db.profile.filterLFG
+end
+
+function TradeFilter:ToggleFilterLFG()
+ self.db.profile.filterLFG = not self.db.profile.filterLFG
+end
+
+function TradeFilter:IsFilterGeneral()
+ return self.db.profile.filtergeneral
+end
+
+function TradeFilter:ToggleFilterGeneral()
+ self.db.profile.filtergeneral = not self.db.profile.filtergeneral
+end
+
+function TradeFilter:IsFilterTrade()
+ return self.db.profile.filtertrade
+end
+
+function TradeFilter:ToggleFilterTrade()
+ self.db.profile.filtertrade = not self.db.profile.filtertrade
+end
+
+function TradeFilter:IsDebug()
+ return self.db.profile.debug
+end
+
+function TradeFilter:ToggleDebug()
+ self.db.profile.debug = not self.db.profile.debug
+end
+
+function TradeFilter:IsRedirect()
+ return self.db.profile.redirect
+end
+
+function TradeFilter:ToggleRedirect()
+ self.db.profile.redirect = not self.db.profile.redirect
+end
+
+function TradeFilter:IsTurnOn()
+ return self.db.profile.turnOn
+end
+
+function TradeFilter:ToggleTurnOn()
+ self.db.profile.turnOn = not self.db.profile.turnOn
+end
+
+function TradeFilter:OnEnable()
+ TradeFilter:AddTimer(0, "PostEnable")
+end
+
+function TradeFilter:PostEnable()
+ print("|cFF33FF99TradeFilter|r: " .. TradeFilter.version .. " |cff00ff00Enabled|r")
+end
+
+function TradeFilter:OnDisable()
+ print("|cFF33FF99TradeFilter|r: " .. TradeFilter.version .. " |cffff8080Disabled|r")
+end
+
+function TradeFilter:OnInitialize()
+local optionsTable = {
+ name = "TradeFilter",
+ desc = self.notes,
+ handler = TradeFilter,
+ type='group',
+ args = {
+ turnOn = {
+ type = 'boolean',
+ order = 1,
+ name = L["TurnOn"],
+ desc = L["TurnOnDesc"],
+ get = "IsTurnOn",
+ set = "ToggleTurnOn",
+ },
+ redirect = {
+ type = 'boolean',
+ order = 2,
+ name = L["Redir"],
+ desc = L["RedirDesc"],
+ get = "IsRedirect",
+ set = "ToggleRedirect",
+ },
+ debug = {
+ type = 'boolean',
+ order = 3,
+ disabled = true,
+ hidden = true,
+ name = L["Debug"],
+ desc = L["DebugDesc"],
+ get = "IsDebug",
+ set = "ToggleDebug",
+ },
+ reload = {
+ type = 'execute',
+ name = L["RUI"],
+ desc = L["RUID"],
+ buttonText = L["RUI"],
+ func = function()
+ _G.ReloadUI()
+ end,
+ --disabled = function()
+ -- return not self:IsDebug or return not self:IsRedirect
+ --end,
+ order = -1,
+ },
+ channelGroup = {
+ type = 'group',
+ order = 1,
+ disabled = false,
+ name = "Channel Selection",
+ desc = "Channel Selection [Not Implemented Yet]",
+ args = {
+ tradeChannel = {
+ type = 'boolean',
+ order = 1,
+ disabled = false,
+ name = L["TC"],
+ desc = L["TCD"],
+ get = "IsFilterTrade",
+ set = "ToggleFilterTrade",
+ },
+ generalChannel = {
+ type = 'boolean',
+ order = 2,
+ disabled = false,
+ name = L["GC"],
+ desc = L["GCD"],
+ get = "IsFilterGeneral",
+ set = "ToggleFilterGeneral",
+ },
+ LFGChannel = {
+ type = 'boolean',
+ order = 3,
+ disabled = false,
+ name = L["LFGC"],
+ desc = L["LFGCD"],
+ get = "IsFilterLFG",
+ set = "ToggleFilterLFG",
+ },
+ SAYChannel = {
+ type = 'boolean',
+ order = 3,
+ disabled = false,
+ name = L["SAYC"],
+ desc = L["SAYD"],
+ get = "IsFilterSAY",
+ set = "ToggleFilterSAY",
+ },
+ },
+ },
+ addFilterGroup = {
+ type = 'group',
+ disabled = false,
+ name = L["AddFilterG"],
+ desc = L["AddFilterGD"],
+ args = {
+ addFilter = {
+ type = 'boolean',
+ order = 1,
+ name = L["AddFilter"],
+ desc = L["AddFilterD"],
+ get = "GetAddFilter",
+ set = "SetAddFilter",
+ },
+ addFilter1 = {
+ type = 'text',
+ disabled = function()
+ return not self:GetAddFilter()
+ end,
+ order = 2,
+ name = L["AddFilter1"],
+ desc = L["AddFilter1D"],
+ get = "GetAddFilter1",
+ set = "SetAddFilter1",
+ usage = L["AddFilterUsage"],
+ },
+ addFilter2 = {
+ type = 'text',
+ disabled = function()
+ return not self:GetAddFilter()
+ end,
+ order = 3,
+ name = L["AddFilter2"],
+ desc = L["AddFilter1D"],
+ get = "GetAddFilter2",
+ set = "SetAddFilter2",
+ usage = L["AddFilterUsage"],
+ },
+ addFilter3 = {
+ type = 'text',
+ disabled = function()
+ return not self:GetAddFilter()
+ end,
+ order = 4,
+ name = L["AddFilter3"],
+ desc = L["AddFilter1D"],
+ get = "GetAddFilter3",
+ set = "SetAddFilter3",
+ usage = L["AddFilterUsage"],
+ },
+ },
+ },
+ },
+ }
+ self:SetConfigTable(optionsTable)
+ self.OnMenuRequest = optionsTable
+ self:SetConfigSlashCommand("/TradeFilter", "/Filter")
+end
+
+--[[ Locals ]]--
+local _G = getfenv()
+local filtered = false
+local redirectFrame = nil
+local debugFrame = nil
+local lastArg1
+local lastArg2
+
+--[[ Window Functions ]]--
+function TradeFilter:FindOrCreateChatWindow(window, create)
+ local frame = nil
+--[[
+ if frame == nil and create then
+ frame = CreateFrame("Frame", window, UIParent)
+ _G["ChatFrame" .. NUM_CHAT_WINDOWS+1] = frame
+ --setglobal("ChatFrame" .. NUM_CHAT_WINDOWS+1, frame)
+ frame:Show()
+ if (TradeFilter:IsDebug()) then TradeFilter:SendMessageToChat(debugFrame,"TradeFilter: created the frame " .. window) end
+ if frame then
+ DEFAULT_CHAT_FRAME:AddMessage("TradeFilter: created the frame " .. window .. "", 1.0, 0.0, 0.0, 0.0, 53, 5.0)
+ frame:AddMessage("TradeFilter: created the frame " .. window)
+ end
+
+ for i=1,NUM_CHAT_WINDOWS do
+ name, fontSize, r, g, b, alpha, shown, locked, docked = GetChatWindowInfo(i)
+ if (TradeFilter:IsDebug()) then TradeFilter:SendMessageToChat(debugFrame, name .. " found") end
+ if (name == window) then
+ SetChatWindowShown(i, true)
+ SetChatWindowDocked(i, true)
+ SetChatWindowAlpha(i, 50)
+ end
+ end
+ end
+]]--
+
+ for i=1,NUM_CHAT_WINDOWS do
+ name, fontSize, r, g, b, alpha, shown, locked, docked = GetChatWindowInfo(i)
+ if (TradeFilter:IsDebug()) then
+ TradeFilter:SendMessageToChat(debugFrame, name .. " found")
+ end
+ if (name == window) then
+ SetChatWindowShown(i, true)
+ --SetChatWindowDocked(i+1, true)
+ --SetChatWindowAlpha(i, 50)
+ frame = getglobal("ChatFrame" .. i)
+ frame:AddMessage("TradeFilter: found the frame " .. window);
+ end
+ end
+
+ return frame
+end
+
+--[[ Chat Functions ]]--
+function TradeFilter:SendMessageToChat(frame, message)
+ if frame then
+ frame:AddMessage(message)
+ end
+end
+
+--[[ PreFilter ]]--
+local function PreFilter_OnEvent(...)
+ --[[ Taken from SpamMeNot
+ arg1: chat message
+ arg2: author
+ arg7: zone ID used for generic system channels (1 for General,
+ 2 for Trade, 22 for LocalDefense, 23 for WorldDefense and
+ 26 for LFG) not used for custom channels or if you joined
+ an Out-Of-Zone channel ex: "General - Stormwind City"
+ arg8: channel number
+ ]]
+ local zoneID = select(8, ...)
+
+ --[[ Check for General Channel and User setting ]]--
+ if (zoneID == 1 and TradeFilter:IsFilterGeneral()) then
+ TradeFilter:TradeFilter_OnEvent()
+ else
+ filtered = false
+ end
+ --[[ Check for Trade Channel and User setting ]]--
+ if (zoneID == 2 and TradeFilter:IsFilterTrade()) then
+ TradeFilter:TradeFilter_OnEvent()
+ elseif (zoneID == 2 and not TradeFilter:IsFilterTrade()) then
+ filtered = false
+ end
+ --[[ Check for LFG Channel and User setting ]]--
+ if (zoneID == 4 and TradeFilter:IsFilterLFG()) then
+ TradeFilter:TradeFilter_OnEvent()
+ else
+ filtered = false
+ end
+ --[[ Check for test Channel and User setting ]]--
+ if (zoneID == 5 and TradeFilter:IsFilterGeneral()) then
+ TradeFilter:TradeFilter_OnEvent(...)
+ else
+ filtered = false
+ end
+ --[[ Check for SAY Channel and User setting ]]--
+ if (TradeFilter:IsFilterSAY()) then
+ TradeFilter:TradeFilter_OnEvent()
+ elseif (not TradeFilter:IsFilterSAY()) then
+ filtered = false
+ end
+ return filtered
+end
+
+--[[ Filter Func ]]--
+function TradeFilter:TradeFilter_OnEvent(...)
+ local filterFuncList = ChatFrame_GetMessageEventFilters("CHAT_MSG_CHANNEL")
+ if (TradeFilter:IsDebug() and debugFrame == nil) then
+ debugFrame = TradeFilter:FindOrCreateChatWindow("DEBUG", true)
+ TradeFilter:SendMessageToChat(debugFrame,"*** Debug is ON ***")
+ end
+ if (TradeFilter:IsRedirect() and redirectFrame == nil) then
+ redirectFrame = TradeFilter:FindOrCreateChatWindow("SPAM", true)
+ TradeFilter:SendMessageToChat(redirectFrame,"*** Redirect is ON ***")
+ end
+ if (filterFuncList and TradeFilter:IsTurnOn()) then
+ filtered = true
+ if (TradeFilter:IsDebug()) then
+ TradeFilter:SendMessageToChat(debugFrame, "arg1: " .. arg1 .. " arg2: " .. arg2)
+ end
+ for i, matchIt in ipairs(TradeFilter.db.profile.filter) do
+ if (TradeFilter:IsDebug() and not TradeFilter:GetAddFilter()) then
+ TradeFilter:SendMessageToChat(debugFrame, "Checking for Match with " .. matchIt[1])
+ elseif (TradeFilter:IsDebug() and TradeFilter:GetAddFilter()) then
+ TradeFilter:SendMessageToChat(debugFrame, "Checking for Match with " .. matchIt[1])
+ TradeFilter:SendMessageToChat(debugFrame, TradeFilter.db.profile.addfilter1)
+ TradeFilter:SendMessageToChat(debugFrame, TradeFilter.db.profile.addfilter2)
+ TradeFilter:SendMessageToChat(debugFrame, TradeFilter.db.profile.addfilter3)
+ end
+ if(not TradeFilter:GetAddFilter()) then
+ if matchIt[2] and string.find(arg1, matchIt[1]) then
+ if (TradeFilter:IsDebug()) then
+ TradeFilter:SendMessageToChat(debugFrame, "|cff00ff00**** Matched ***|r")
+ end
+ filtered = false
+ end
+ elseif(TradeFilter:GetAddFilter()) then
+ if matchIt[2] and string.find(arg1, matchIt[1]) or string.find(arg1, TradeFilter.db.profile.addfilter1) or string.find(arg1, TradeFilter.db.profile.addfilter2) or string.find(arg1, TradeFilter.db.profile.addfilter3) then
+ if (TradeFilter:IsDebug()) then
+ TradeFilter:SendMessageToChat(debugFrame, "|cff00ff00**** Matched ***|r")
+ end
+ filtered = false
+ end
+ end
+ end
+ if filtered == true then
+ if lastArg1 ~= arg1 or lastArg2 ~= arg2 then
+ if (TradeFilter:IsDebug()) then
+ TradeFilter:SendMessageToChat(debugFrame, "|cff00ff00*** NO Match - Redirected ***|r")
+ end
+ if (TradeFilter:IsRedirect()) then
+ TradeFilter:SendMessageToChat(redirectFrame, string.format(CHAT_CHANNEL_GET, arg8) .. string.format(CHAT_CHANNEL_GET, arg2) .. arg1)
+ end
+ lastArg1, lastArg2 = arg1, arg2
+ return
+ end
+ end
+ end
+end
+
+--[[ Pass ALL chat messages to PreFilter function ]]--
+ChatFrame_AddMessageEventFilter("CHAT_MSG_SAY", PreFilter_OnEvent)
+ChatFrame_AddMessageEventFilter("CHAT_MSG_CHANNEL", PreFilter_OnEvent)
diff --git a/v1.1.32 release/TradeFilter.toc b/v1.1.32 release/TradeFilter.toc
new file mode 100644
index 0000000..2cfe0b5
--- /dev/null
+++ b/v1.1.32 release/TradeFilter.toc
@@ -0,0 +1,20 @@
+## Interface: 30000
+## Title: Trade|cffffffffFilter|r 1.0
+## Notes: Filter the shit outta trade channel.
+## Author: Evonder
+## Inspired By: crashmstr(wowzn@crashmstr.com)
+## X-eMail: evonder@omnesia.net
+## X-Website:
+## X-Category: Chat & Communication
+## X-License: BSD
+## Version: @project-version@
+
+## OptionalDeps: LibRock-1.0, Ace2
+## X-Embeds: LibRock-1.0, LibRockDB-1.0,, LibRockHook-1.0, LibRockEvent-1.0, LibRockTimer-1.0, LibRockConsole-1.0, LibRockLocale-1.0, AceLibrary
+## SavedVariables: TradeFilterDB
+
+embeds.xml
+
+TradeFilterLocale-enUS.lua
+
+TradeFilter.lua
diff --git a/v1.1.32 release/TradeFilterLocale-enUS.lua b/v1.1.32 release/TradeFilterLocale-enUS.lua
new file mode 100644
index 0000000..19603b4
--- /dev/null
+++ b/v1.1.32 release/TradeFilterLocale-enUS.lua
@@ -0,0 +1,28 @@
+local L = Rock("LibRockLocale-1.0"):GetTranslationNamespace("TradeFilter")
+L:AddTranslations("enUS", function() return {
+ ["TurnOn"] = "Turn On",
+ ["TurnOnDesc"] = "Enable Trade Channel Filter.",
+ ["Redir"] = "Redirect Spam [Requires UI Reload]",
+ ["RedirDesc"] = "Redirect Trade Channel Spam to SPAM Channel [Requires UI Reload].",
+ ["Debug"] = "Debugging [Requires UI Reload]",
+ ["DebugDesc"] = "Enable Debugging and Output to DEBUG Channel [Requires UI Reload].",
+ ["AddFilterG"] = "Add Filter Expression",
+ ["AddFilterGD"] = "Add Filter Expression to be matched in Trade Channel Group.",
+ ["AddFilter"] = "Add Filter Expression",
+ ["AddFilterD"] = "Add Filter Expression to be matched in Trade Channel. [Requires UI Reload to Enable]",
+ ["AddFilter1"] = "Custom Filter Expression 1",
+ ["AddFilter2"] = "Custom Filter Expression 2",
+ ["AddFilter3"] = "Custom Filter Expression 3",
+ ["AddFilter1D"] = "Add Custom Filter Expression to be Allowed in Trade Channel.",
+ ["AddFilterUsage"] = "Case Insensitive LFG = [lL][fF][gG]",
+ ["RUI"] = "Reload UI",
+ ["RUID"] = "Reload the User Interface for some changes to take effect.",
+ ["TC"] = "Filter Trade Channel",
+ ["TCD"] = "Select this to apply filter to Trade Channel",
+ ["GC"] = "Filter General Channel",
+ ["GCD"] = "Select this to apply filter to General Channel.",
+ ["LFGC"] = "Filter LFG Channel",
+ ["LFGCD"] = "Select this to apply filter to LFG Channel.",
+ ["SAYC"] = "Filter SAY Channel",
+ ["SAYCD"] = "Select this to apply filter to SAY Channel.",
+} end)
diff --git a/v1.1.32 release/embeds.xml b/v1.1.32 release/embeds.xml
new file mode 100644
index 0000000..6ba276c
--- /dev/null
+++ b/v1.1.32 release/embeds.xml
@@ -0,0 +1,14 @@
+<Ui xmlns="http://www.blizzard.com/wow/ui/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.blizzard.com/wow/ui/
+..\FrameXML\UI.xsd">
+
+<Include file="libs\LibRock-1.0\lib.xml"/>
+<Include file="libs\LibRockDB-1.0\lib.xml"/>
+<Include file="libs\LibRockLocale-1.0\lib.xml"/>
+<Include file="libs\LibRockEvent-1.0\lib.xml"/>
+<Include file="libs\LibRockHook-1.0\lib.xml"/>
+<Include file="libs\LibRockTimer-1.0\lib.xml"/>
+<Include file="libs\LibRockConsole-1.0\lib.xml"/>
+<Include file="libs\LibRockConfig-1.0\lib.xml"/>
+<Script file="libs\AceLibrary\AceLibrary.lua"/>
+
+</Ui>