flickerstreak@1
|
1 --[[
|
flickerstreak@1
|
2 Name: AceAddon-2.0
|
flickerstreak@1
|
3 Revision: $Rev: 19844 $
|
flickerstreak@1
|
4 Developed by: The Ace Development Team (http://www.wowace.com/index.php/The_Ace_Development_Team)
|
flickerstreak@1
|
5 Inspired By: Ace 1.x by Turan (turan@gryphon.com)
|
flickerstreak@1
|
6 Website: http://www.wowace.com/
|
flickerstreak@1
|
7 Documentation: http://www.wowace.com/index.php/AceAddon-2.0
|
flickerstreak@1
|
8 SVN: http://svn.wowace.com/root/trunk/Ace2/AceAddon-2.0
|
flickerstreak@1
|
9 Description: Base for all Ace addons to inherit from.
|
flickerstreak@1
|
10 Dependencies: AceLibrary, AceOO-2.0, AceEvent-2.0, (optional) AceConsole-2.0
|
flickerstreak@1
|
11 ]]
|
flickerstreak@1
|
12
|
flickerstreak@1
|
13 local MAJOR_VERSION = "AceAddon-2.0"
|
flickerstreak@1
|
14 local MINOR_VERSION = "$Revision: 19844 $"
|
flickerstreak@1
|
15
|
flickerstreak@1
|
16 -- This ensures the code is only executed if the libary doesn't already exist, or is a newer version
|
flickerstreak@1
|
17 if not AceLibrary then error(MAJOR_VERSION .. " requires AceLibrary.") end
|
flickerstreak@1
|
18 if not AceLibrary:IsNewVersion(MAJOR_VERSION, MINOR_VERSION) then return end
|
flickerstreak@1
|
19
|
flickerstreak@1
|
20 if not AceLibrary:HasInstance("AceOO-2.0") then error(MAJOR_VERSION .. " requires AceOO-2.0.") end
|
flickerstreak@1
|
21
|
flickerstreak@1
|
22 local function safecall(func,...)
|
flickerstreak@1
|
23 local success, err = pcall(func,...)
|
flickerstreak@1
|
24 if not success then geterrorhandler()(err) end
|
flickerstreak@1
|
25 end
|
flickerstreak@1
|
26 -- Localization
|
flickerstreak@1
|
27 local STANDBY, TITLE, NOTES, VERSION, AUTHOR, DATE, CATEGORY, EMAIL, CREDITS, WEBSITE, CATEGORIES, ABOUT, PRINT_ADDON_INFO
|
flickerstreak@1
|
28 if GetLocale() == "deDE" then
|
flickerstreak@1
|
29 STANDBY = "|cffff5050(Standby)|r" -- capitalized
|
flickerstreak@1
|
30
|
flickerstreak@1
|
31 TITLE = "Titel"
|
flickerstreak@1
|
32 NOTES = "Anmerkung"
|
flickerstreak@1
|
33 VERSION = "Version"
|
flickerstreak@1
|
34 AUTHOR = "Autor"
|
flickerstreak@1
|
35 DATE = "Datum"
|
flickerstreak@1
|
36 CATEGORY = "Kategorie"
|
flickerstreak@1
|
37 EMAIL = "E-mail"
|
flickerstreak@1
|
38 WEBSITE = "Webseite"
|
flickerstreak@1
|
39 CREDITS = "Credits" -- fix
|
flickerstreak@1
|
40
|
flickerstreak@1
|
41 ABOUT = "\195\188ber"
|
flickerstreak@1
|
42 PRINT_ADDON_INFO = "Gibt Addondaten aus"
|
flickerstreak@1
|
43
|
flickerstreak@1
|
44 CATEGORIES = {
|
flickerstreak@1
|
45 ["Action Bars"] = "Aktionsleisten",
|
flickerstreak@1
|
46 ["Auction"] = "Auktion",
|
flickerstreak@1
|
47 ["Audio"] = "Audio",
|
flickerstreak@1
|
48 ["Battlegrounds/PvP"] = "Schlachtfeld/PvP",
|
flickerstreak@1
|
49 ["Buffs"] = "Buffs",
|
flickerstreak@1
|
50 ["Chat/Communication"] = "Chat/Kommunikation",
|
flickerstreak@1
|
51 ["Druid"] = "Druide",
|
flickerstreak@1
|
52 ["Hunter"] = "J?r",
|
flickerstreak@1
|
53 ["Mage"] = "Magier",
|
flickerstreak@1
|
54 ["Paladin"] = "Paladin",
|
flickerstreak@1
|
55 ["Priest"] = "Priester",
|
flickerstreak@1
|
56 ["Rogue"] = "Schurke",
|
flickerstreak@1
|
57 ["Shaman"] = "Schamane",
|
flickerstreak@1
|
58 ["Warlock"] = "Hexenmeister",
|
flickerstreak@1
|
59 ["Warrior"] = "Krieger",
|
flickerstreak@1
|
60 ["Healer"] = "Heiler",
|
flickerstreak@1
|
61 ["Tank"] = "Tank", -- noone use "Brecher"...
|
flickerstreak@1
|
62 ["Caster"] = "Caster",
|
flickerstreak@1
|
63 ["Combat"] = "Kampf",
|
flickerstreak@1
|
64 ["Compilations"] = "Compilations", -- whats that o_O
|
flickerstreak@1
|
65 ["Data Export"] = "Datenexport",
|
flickerstreak@1
|
66 ["Development Tools"] = "Entwicklungs Tools",
|
flickerstreak@1
|
67 ["Guild"] = "Gilde",
|
flickerstreak@1
|
68 ["Frame Modification"] = "Frame Modifikation",
|
flickerstreak@1
|
69 ["Interface Enhancements"] = "Interface Verbesserungen",
|
flickerstreak@1
|
70 ["Inventory"] = "Inventar",
|
flickerstreak@1
|
71 ["Library"] = "Library",
|
flickerstreak@1
|
72 ["Map"] = "Map",
|
flickerstreak@1
|
73 ["Mail"] = "Mail",
|
flickerstreak@1
|
74 ["Miscellaneous"] = "Diverses",
|
flickerstreak@1
|
75 ["Quest"] = "Quest",
|
flickerstreak@1
|
76 ["Raid"] = "Schlachtzug",
|
flickerstreak@1
|
77 ["Tradeskill"] = "Handelsf\195\164higkeit",
|
flickerstreak@1
|
78 ["UnitFrame"] = "UnitFrame",
|
flickerstreak@1
|
79 }
|
flickerstreak@1
|
80 elseif GetLocale() == "frFR" then
|
flickerstreak@1
|
81 STANDBY = "|cffff5050(attente)|r"
|
flickerstreak@1
|
82
|
flickerstreak@1
|
83 TITLE = "Titre"
|
flickerstreak@1
|
84 NOTES = "Notes"
|
flickerstreak@1
|
85 VERSION = "Version"
|
flickerstreak@1
|
86 AUTHOR = "Auteur"
|
flickerstreak@1
|
87 DATE = "Date"
|
flickerstreak@1
|
88 CATEGORY = "Cat\195\169gorie"
|
flickerstreak@1
|
89 EMAIL = "E-mail"
|
flickerstreak@1
|
90 WEBSITE = "Site web"
|
flickerstreak@1
|
91 CREDITS = "Credits" -- fix
|
flickerstreak@1
|
92
|
flickerstreak@1
|
93 ABOUT = "A propos"
|
flickerstreak@1
|
94 PRINT_ADDON_INFO = "Afficher les informations sur l'addon"
|
flickerstreak@1
|
95
|
flickerstreak@1
|
96 CATEGORIES = {
|
flickerstreak@1
|
97 ["Action Bars"] = "Barres d'action",
|
flickerstreak@1
|
98 ["Auction"] = "H\195\180tel des ventes",
|
flickerstreak@1
|
99 ["Audio"] = "Audio",
|
flickerstreak@1
|
100 ["Battlegrounds/PvP"] = "Champs de bataille/JcJ",
|
flickerstreak@1
|
101 ["Buffs"] = "Buffs",
|
flickerstreak@1
|
102 ["Chat/Communication"] = "Chat/Communication",
|
flickerstreak@1
|
103 ["Druid"] = "Druide",
|
flickerstreak@1
|
104 ["Hunter"] = "Chasseur",
|
flickerstreak@1
|
105 ["Mage"] = "Mage",
|
flickerstreak@1
|
106 ["Paladin"] = "Paladin",
|
flickerstreak@1
|
107 ["Priest"] = "Pr\195\170tre",
|
flickerstreak@1
|
108 ["Rogue"] = "Voleur",
|
flickerstreak@1
|
109 ["Shaman"] = "Chaman",
|
flickerstreak@1
|
110 ["Warlock"] = "D\195\169moniste",
|
flickerstreak@1
|
111 ["Warrior"] = "Guerrier",
|
flickerstreak@1
|
112 ["Healer"] = "Soigneur",
|
flickerstreak@1
|
113 ["Tank"] = "Tank",
|
flickerstreak@1
|
114 ["Caster"] = "Casteur",
|
flickerstreak@1
|
115 ["Combat"] = "Combat",
|
flickerstreak@1
|
116 ["Compilations"] = "Compilations",
|
flickerstreak@1
|
117 ["Data Export"] = "Exportation de donn\195\169es",
|
flickerstreak@1
|
118 ["Development Tools"] = "Outils de d\195\169veloppement",
|
flickerstreak@1
|
119 ["Guild"] = "Guilde",
|
flickerstreak@1
|
120 ["Frame Modification"] = "Modification des fen\195\170tres",
|
flickerstreak@1
|
121 ["Interface Enhancements"] = "Am\195\169liorations de l'interface",
|
flickerstreak@1
|
122 ["Inventory"] = "Inventaire",
|
flickerstreak@1
|
123 ["Library"] = "Biblioth\195\168ques",
|
flickerstreak@1
|
124 ["Map"] = "Carte",
|
flickerstreak@1
|
125 ["Mail"] = "Courrier",
|
flickerstreak@1
|
126 ["Miscellaneous"] = "Divers",
|
flickerstreak@1
|
127 ["Quest"] = "Qu\195\170tes",
|
flickerstreak@1
|
128 ["Raid"] = "Raid",
|
flickerstreak@1
|
129 ["Tradeskill"] = "M\195\169tiers",
|
flickerstreak@1
|
130 ["UnitFrame"] = "Fen\195\170tres d'unit\195\169",
|
flickerstreak@1
|
131 }
|
flickerstreak@1
|
132 elseif GetLocale() == "koKR" then
|
flickerstreak@1
|
133 STANDBY = "|cffff5050(????)|r"
|
flickerstreak@1
|
134
|
flickerstreak@1
|
135 TITLE = "??"
|
flickerstreak@1
|
136 NOTES = "??"
|
flickerstreak@1
|
137 VERSION = "??"
|
flickerstreak@1
|
138 AUTHOR = "???"
|
flickerstreak@1
|
139 DATE = "??"
|
flickerstreak@1
|
140 CATEGORY = "??"
|
flickerstreak@1
|
141 EMAIL = "E-mail"
|
flickerstreak@1
|
142 WEBSITE = "????"
|
flickerstreak@1
|
143 CREDITS = "Credits" -- fix
|
flickerstreak@1
|
144
|
flickerstreak@1
|
145 ABOUT = "??"
|
flickerstreak@1
|
146 PRINT_ADDON_INFO = "??? ?? ??"
|
flickerstreak@1
|
147
|
flickerstreak@1
|
148 CATEGORIES = {
|
flickerstreak@1
|
149 ["Action Bars"] = "???",
|
flickerstreak@1
|
150 ["Auction"] = "??",
|
flickerstreak@1
|
151 ["Audio"] = "??",
|
flickerstreak@1
|
152 ["Battlegrounds/PvP"] = "??/PvP",
|
flickerstreak@1
|
153 ["Buffs"] = "??",
|
flickerstreak@1
|
154 ["Chat/Communication"] = "??/????",
|
flickerstreak@1
|
155 ["Druid"] = "????",
|
flickerstreak@1
|
156 ["Hunter"] = "???",
|
flickerstreak@1
|
157 ["Mage"] = "???",
|
flickerstreak@1
|
158 ["Paladin"] = "???",
|
flickerstreak@1
|
159 ["Priest"] = "??",
|
flickerstreak@1
|
160 ["Rogue"] = "??",
|
flickerstreak@1
|
161 ["Shaman"] = "???",
|
flickerstreak@1
|
162 ["Warlock"] = "????",
|
flickerstreak@1
|
163 ["Warrior"] = "??",
|
flickerstreak@1
|
164 ["Healer"] = "??",
|
flickerstreak@1
|
165 ["Tank"] = "??",
|
flickerstreak@1
|
166 ["Caster"] = "???",
|
flickerstreak@1
|
167 ["Combat"] = "??",
|
flickerstreak@1
|
168 ["Compilations"] = "??",
|
flickerstreak@1
|
169 ["Data Export"] = "?? ??",
|
flickerstreak@1
|
170 ["Development Tools"] = "?? ??",
|
flickerstreak@1
|
171 ["Guild"] = "??",
|
flickerstreak@1
|
172 ["Frame Modification"] = "?? ??",
|
flickerstreak@1
|
173 ["Interface Enhancements"] = "????? ??",
|
flickerstreak@1
|
174 ["Inventory"] = "????",
|
flickerstreak@1
|
175 ["Library"] = "?????",
|
flickerstreak@1
|
176 ["Map"] = "??",
|
flickerstreak@1
|
177 ["Mail"] = "??",
|
flickerstreak@1
|
178 ["Miscellaneous"] = "??",
|
flickerstreak@1
|
179 ["Quest"] = "???",
|
flickerstreak@1
|
180 ["Raid"] = "???",
|
flickerstreak@1
|
181 ["Tradeskill"] = "????",
|
flickerstreak@1
|
182 ["UnitFrame"] = "?? ???",
|
flickerstreak@1
|
183 }
|
flickerstreak@1
|
184 elseif GetLocale() == "zhTW" then
|
flickerstreak@1
|
185 STANDBY = "|cffff5050(??)|r"
|
flickerstreak@1
|
186
|
flickerstreak@1
|
187 TITLE = "??"
|
flickerstreak@1
|
188 NOTES = "??"
|
flickerstreak@1
|
189 VERSION = "??"
|
flickerstreak@1
|
190 AUTHOR = "??"
|
flickerstreak@1
|
191 DATE = "??"
|
flickerstreak@1
|
192 CATEGORY = "??"
|
flickerstreak@1
|
193 EMAIL = "E-mail"
|
flickerstreak@1
|
194 WEBSITE = "??"
|
flickerstreak@1
|
195 CREDITS = "Credits" -- fix
|
flickerstreak@1
|
196
|
flickerstreak@1
|
197 ABOUT = "??"
|
flickerstreak@1
|
198 PRINT_ADDON_INFO = "??????"
|
flickerstreak@1
|
199
|
flickerstreak@1
|
200 CATEGORIES = {
|
flickerstreak@1
|
201 ["Action Bars"] = "???",
|
flickerstreak@1
|
202 ["Auction"] = "??",
|
flickerstreak@1
|
203 ["Audio"] = "??",
|
flickerstreak@1
|
204 ["Battlegrounds/PvP"] = "??/PvP",
|
flickerstreak@1
|
205 ["Buffs"] = "??",
|
flickerstreak@1
|
206 ["Chat/Communication"] = "??/??",
|
flickerstreak@1
|
207 ["Druid"] = "???",
|
flickerstreak@1
|
208 ["Hunter"] = "??",
|
flickerstreak@1
|
209 ["Mage"] = "??",
|
flickerstreak@1
|
210 ["Paladin"] = "???",
|
flickerstreak@1
|
211 ["Priest"] = "??",
|
flickerstreak@1
|
212 ["Rogue"] = "??",
|
flickerstreak@1
|
213 ["Shaman"] = "??",
|
flickerstreak@1
|
214 ["Warlock"] = "??",
|
flickerstreak@1
|
215 ["Warrior"] = "??",
|
flickerstreak@1
|
216 ["Healer"] = "???",
|
flickerstreak@1
|
217 ["Tank"] = "??",
|
flickerstreak@1
|
218 ["Caster"] = "???",
|
flickerstreak@1
|
219 ["Combat"] = "??",
|
flickerstreak@1
|
220 ["Compilations"] = "??",
|
flickerstreak@1
|
221 ["Data Export"] = "????",
|
flickerstreak@1
|
222 ["Development Tools"] = "????",
|
flickerstreak@1
|
223 ["Guild"] = "??",
|
flickerstreak@1
|
224 ["Frame Modification"] = "????",
|
flickerstreak@1
|
225 ["Interface Enhancements"] = "????",
|
flickerstreak@1
|
226 ["Inventory"] = "??",
|
flickerstreak@1
|
227 ["Library"] = "???",
|
flickerstreak@1
|
228 ["Map"] = "??",
|
flickerstreak@1
|
229 ["Mail"] = "??",
|
flickerstreak@1
|
230 ["Miscellaneous"] = "??",
|
flickerstreak@1
|
231 ["Quest"] = "??",
|
flickerstreak@1
|
232 ["Raid"] = "??",
|
flickerstreak@1
|
233 ["Tradeskill"] = "????",
|
flickerstreak@1
|
234 ["UnitFrame"] = "????",
|
flickerstreak@1
|
235 }
|
flickerstreak@1
|
236 elseif GetLocale() == "zhCN" then
|
flickerstreak@1
|
237 STANDBY = "|cffff5050(\230\154\130\230\140\130)|r"
|
flickerstreak@1
|
238
|
flickerstreak@1
|
239 TITLE = "\230\160\135\233\162\152"
|
flickerstreak@1
|
240 NOTES = "\233\153\132\230\179\168"
|
flickerstreak@1
|
241 VERSION = "\231\137\136\230\156\172"
|
flickerstreak@1
|
242 AUTHOR = "\228\189\156\232\128\133"
|
flickerstreak@1
|
243 DATE = "\230\151\165\230\156\159"
|
flickerstreak@1
|
244 CATEGORY = "\229\136\134\231\177\187"
|
flickerstreak@1
|
245 EMAIL = "\231\148\181\229\173\144\233\130\174\228\187\182"
|
flickerstreak@1
|
246 WEBSITE = "\231\189\145\231\171\153"
|
flickerstreak@1
|
247 CREDITS = "Credits" -- fix
|
flickerstreak@1
|
248
|
flickerstreak@1
|
249 ABOUT = "\229\133\179\228\186\142"
|
flickerstreak@1
|
250 PRINT_ADDON_INFO = "\229\141\176\229\136\151\229\135\186\230\143\146\228\187\182\228\191\161\230\129\175"
|
flickerstreak@1
|
251
|
flickerstreak@1
|
252 CATEGORIES = {
|
flickerstreak@1
|
253 ["Action Bars"] = "\229\138\168\228\189\156\230\157\161",
|
flickerstreak@1
|
254 ["Auction"] = "\230\139\141\229\141\150",
|
flickerstreak@1
|
255 ["Audio"] = "\233\159\179\233\162\145",
|
flickerstreak@1
|
256 ["Battlegrounds/PvP"] = "\230\136\152\229\156\186/PvP",
|
flickerstreak@1
|
257 ["Buffs"] = "\229\162\158\231\155\138\233\173\148\230\179\149",
|
flickerstreak@1
|
258 ["Chat/Communication"] = "\232\129\138\229\164\169/\228\186\164\230\181\129",
|
flickerstreak@1
|
259 ["Druid"] = "\229\190\183\233\178\129\228\188\138",
|
flickerstreak@1
|
260 ["Hunter"] = "\231\140\142\228\186\186",
|
flickerstreak@1
|
261 ["Mage"] = "\230\179\149\229\184\136",
|
flickerstreak@1
|
262 ["Paladin"] = "\229\156\163\233\170\145\229\163\171",
|
flickerstreak@1
|
263 ["Priest"] = "\231\137\167\229\184\136",
|
flickerstreak@1
|
264 ["Rogue"] = "\231\155\151\232\180\188",
|
flickerstreak@1
|
265 ["Shaman"] = "\232\144\168\230\187\161\231\165\173\229\143\184",
|
flickerstreak@1
|
266 ["Warlock"] = "\230\156\175\229\163\171",
|
flickerstreak@1
|
267 ["Warrior"] = "\230\136\152\229\163\171",
|
flickerstreak@1
|
268 -- ["Healer"] = "\230\178\187\231\150\151\228\191\157\233\154\156",
|
flickerstreak@1
|
269 -- ["Tank"] = "\232\191\145\230\136\152\230\142\167\229\136\182",
|
flickerstreak@1
|
270 -- ["Caster"] = "\232\191\156\231\168\139\232\190\147\229\135\186",
|
flickerstreak@1
|
271 ["Combat"] = "\230\136\152\230\150\151",
|
flickerstreak@1
|
272 ["Compilations"] = "\231\188\150\232\175\145",
|
flickerstreak@1
|
273 ["Data Export"] = "\230\149\176\230\141\174\229\175\188\229\135\186",
|
flickerstreak@1
|
274 ["Development Tools"] = "\229\188\128\229\143\145\229\183\165\229\133\183",
|
flickerstreak@1
|
275 ["Guild"] = "\229\133\172\228\188\154",
|
flickerstreak@1
|
276 ["Frame Modification"] = "\230\161\134\230\158\182\228\191\174\230\148\185",
|
flickerstreak@1
|
277 ["Interface Enhancements"] = "\231\149\140\233\157\162\229\162\158\229\188\186",
|
flickerstreak@1
|
278 ["Inventory"] = "\232\131\140\229\140\133",
|
flickerstreak@1
|
279 ["Library"] = "\229\186\147",
|
flickerstreak@1
|
280 ["Map"] = "\229\156\176\229\155\190",
|
flickerstreak@1
|
281 ["Mail"] = "\233\130\174\228\187\182",
|
flickerstreak@1
|
282 ["Miscellaneous"] = "\230\157\130\233\161\185",
|
flickerstreak@1
|
283 ["Quest"] = "\228\187\187\229\138\161",
|
flickerstreak@1
|
284 ["Raid"] = "\229\155\162\233\152\159",
|
flickerstreak@1
|
285 ["Tradeskill"] = "\229\149\134\228\184\154\230\138\128\232\131\189",
|
flickerstreak@1
|
286 ["UnitFrame"] = "\229\164\180\229\131\143\230\161\134\230\158\182",
|
flickerstreak@1
|
287 }
|
flickerstreak@1
|
288 else -- enUS
|
flickerstreak@1
|
289 STANDBY = "|cffff5050(standby)|r"
|
flickerstreak@1
|
290
|
flickerstreak@1
|
291 TITLE = "Title"
|
flickerstreak@1
|
292 NOTES = "Notes"
|
flickerstreak@1
|
293 VERSION = "Version"
|
flickerstreak@1
|
294 AUTHOR = "Author"
|
flickerstreak@1
|
295 DATE = "Date"
|
flickerstreak@1
|
296 CATEGORY = "Category"
|
flickerstreak@1
|
297 EMAIL = "E-mail"
|
flickerstreak@1
|
298 WEBSITE = "Website"
|
flickerstreak@1
|
299 CREDITS = "Credits"
|
flickerstreak@1
|
300
|
flickerstreak@1
|
301 ABOUT = "About"
|
flickerstreak@1
|
302 PRINT_ADDON_INFO = "Show information about the addon."
|
flickerstreak@1
|
303
|
flickerstreak@1
|
304 CATEGORIES = {
|
flickerstreak@1
|
305 ["Action Bars"] = "Action Bars",
|
flickerstreak@1
|
306 ["Auction"] = "Auction",
|
flickerstreak@1
|
307 ["Audio"] = "Audio",
|
flickerstreak@1
|
308 ["Battlegrounds/PvP"] = "Battlegrounds/PvP",
|
flickerstreak@1
|
309 ["Buffs"] = "Buffs",
|
flickerstreak@1
|
310 ["Chat/Communication"] = "Chat/Communication",
|
flickerstreak@1
|
311 ["Druid"] = "Druid",
|
flickerstreak@1
|
312 ["Hunter"] = "Hunter",
|
flickerstreak@1
|
313 ["Mage"] = "Mage",
|
flickerstreak@1
|
314 ["Paladin"] = "Paladin",
|
flickerstreak@1
|
315 ["Priest"] = "Priest",
|
flickerstreak@1
|
316 ["Rogue"] = "Rogue",
|
flickerstreak@1
|
317 ["Shaman"] = "Shaman",
|
flickerstreak@1
|
318 ["Warlock"] = "Warlock",
|
flickerstreak@1
|
319 ["Warrior"] = "Warrior",
|
flickerstreak@1
|
320 ["Healer"] = "Healer",
|
flickerstreak@1
|
321 ["Tank"] = "Tank",
|
flickerstreak@1
|
322 ["Caster"] = "Caster",
|
flickerstreak@1
|
323 ["Combat"] = "Combat",
|
flickerstreak@1
|
324 ["Compilations"] = "Compilations",
|
flickerstreak@1
|
325 ["Data Export"] = "Data Export",
|
flickerstreak@1
|
326 ["Development Tools"] = "Development Tools",
|
flickerstreak@1
|
327 ["Guild"] = "Guild",
|
flickerstreak@1
|
328 ["Frame Modification"] = "Frame Modification",
|
flickerstreak@1
|
329 ["Interface Enhancements"] = "Interface Enhancements",
|
flickerstreak@1
|
330 ["Inventory"] = "Inventory",
|
flickerstreak@1
|
331 ["Library"] = "Library",
|
flickerstreak@1
|
332 ["Map"] = "Map",
|
flickerstreak@1
|
333 ["Mail"] = "Mail",
|
flickerstreak@1
|
334 ["Miscellaneous"] = "Miscellaneous",
|
flickerstreak@1
|
335 ["Quest"] = "Quest",
|
flickerstreak@1
|
336 ["Raid"] = "Raid",
|
flickerstreak@1
|
337 ["Tradeskill"] = "Tradeskill",
|
flickerstreak@1
|
338 ["UnitFrame"] = "UnitFrame",
|
flickerstreak@1
|
339 }
|
flickerstreak@1
|
340 end
|
flickerstreak@1
|
341
|
flickerstreak@1
|
342 setmetatable(CATEGORIES, { __index = function(self, key) -- case-insensitive
|
flickerstreak@1
|
343 local lowerKey = key:lower()
|
flickerstreak@1
|
344 for k,v in pairs(CATEGORIES) do
|
flickerstreak@1
|
345 if k:lower() == lowerKey then
|
flickerstreak@1
|
346 return v
|
flickerstreak@1
|
347 end
|
flickerstreak@1
|
348 end
|
flickerstreak@1
|
349 end })
|
flickerstreak@1
|
350
|
flickerstreak@1
|
351 -- Create the library object
|
flickerstreak@1
|
352
|
flickerstreak@1
|
353 local AceOO = AceLibrary("AceOO-2.0")
|
flickerstreak@1
|
354 local AceAddon = AceOO.Class()
|
flickerstreak@1
|
355 local AceEvent
|
flickerstreak@1
|
356 local AceConsole
|
flickerstreak@1
|
357 local AceModuleCore
|
flickerstreak@1
|
358
|
flickerstreak@1
|
359 function AceAddon:GetLocalizedCategory(name)
|
flickerstreak@1
|
360 self:argCheck(name, 2, "string")
|
flickerstreak@1
|
361 return CATEGORIES[name] or UNKNOWN
|
flickerstreak@1
|
362 end
|
flickerstreak@1
|
363
|
flickerstreak@1
|
364 function AceAddon:ToString()
|
flickerstreak@1
|
365 return "AceAddon"
|
flickerstreak@1
|
366 end
|
flickerstreak@1
|
367
|
flickerstreak@1
|
368 local function print(text)
|
flickerstreak@1
|
369 DEFAULT_CHAT_FRAME:AddMessage(text)
|
flickerstreak@1
|
370 end
|
flickerstreak@1
|
371
|
flickerstreak@1
|
372 function AceAddon:ADDON_LOADED(name)
|
flickerstreak@1
|
373 while table.getn(self.nextAddon) > 0 do
|
flickerstreak@1
|
374 local addon = table.remove(self.nextAddon, 1)
|
flickerstreak@1
|
375 table.insert(self.addons, addon)
|
flickerstreak@1
|
376 if not self.addons[name] then
|
flickerstreak@1
|
377 self.addons[name] = addon
|
flickerstreak@1
|
378 end
|
flickerstreak@1
|
379 self:InitializeAddon(addon, name)
|
flickerstreak@1
|
380 end
|
flickerstreak@1
|
381 end
|
flickerstreak@1
|
382
|
flickerstreak@1
|
383 local function RegisterOnEnable(self)
|
flickerstreak@1
|
384 if DEFAULT_CHAT_FRAME and DEFAULT_CHAT_FRAME.defaultLanguage then -- HACK
|
flickerstreak@1
|
385 AceAddon.playerLoginFired = true
|
flickerstreak@1
|
386 end
|
flickerstreak@1
|
387 if AceAddon.playerLoginFired then
|
flickerstreak@1
|
388 AceAddon.addonsStarted[self] = true
|
flickerstreak@1
|
389 if (type(self.IsActive) ~= "function" or self:IsActive()) and (not AceModuleCore or not AceModuleCore:IsModule(self) or AceModuleCore:IsModuleActive(self)) then
|
flickerstreak@1
|
390 local current = self.class
|
flickerstreak@1
|
391 while true do
|
flickerstreak@1
|
392 if current == AceOO.Class then
|
flickerstreak@1
|
393 break
|
flickerstreak@1
|
394 end
|
flickerstreak@1
|
395 if current.mixins then
|
flickerstreak@1
|
396 for mixin in pairs(current.mixins) do
|
flickerstreak@1
|
397 if type(mixin.OnEmbedEnable) == "function" then
|
flickerstreak@1
|
398 safecall(mixin.OnEmbedEnable,mixin,self)
|
flickerstreak@1
|
399 end
|
flickerstreak@1
|
400 end
|
flickerstreak@1
|
401 end
|
flickerstreak@1
|
402 current = current.super
|
flickerstreak@1
|
403 end
|
flickerstreak@1
|
404 if type(self.OnEnable) == "function" then
|
flickerstreak@1
|
405 safecall(self.OnEnable,self)
|
flickerstreak@1
|
406 end
|
flickerstreak@1
|
407 if AceEvent then
|
flickerstreak@1
|
408 AceEvent:TriggerEvent("Ace2_AddonEnabled", self)
|
flickerstreak@1
|
409 end
|
flickerstreak@1
|
410 end
|
flickerstreak@1
|
411 else
|
flickerstreak@1
|
412 if not AceAddon.addonsToOnEnable then
|
flickerstreak@1
|
413 AceAddon.addonsToOnEnable = {}
|
flickerstreak@1
|
414 end
|
flickerstreak@1
|
415 table.insert(AceAddon.addonsToOnEnable, self)
|
flickerstreak@1
|
416 end
|
flickerstreak@1
|
417 end
|
flickerstreak@1
|
418
|
flickerstreak@1
|
419 local function stripSpaces(text)
|
flickerstreak@1
|
420 if type(text) == "string" then
|
flickerstreak@1
|
421 return strtrim(text)
|
flickerstreak@1
|
422 end
|
flickerstreak@1
|
423 return text
|
flickerstreak@1
|
424 end
|
flickerstreak@1
|
425
|
flickerstreak@1
|
426 function AceAddon:InitializeAddon(addon, name)
|
flickerstreak@1
|
427 if addon.name == nil then
|
flickerstreak@1
|
428 addon.name = name
|
flickerstreak@1
|
429 end
|
flickerstreak@1
|
430 if GetAddOnMetadata then
|
flickerstreak@1
|
431 -- TOC checks
|
flickerstreak@1
|
432 if addon.title == nil then
|
flickerstreak@1
|
433 addon.title = GetAddOnMetadata(name, "Title")
|
flickerstreak@1
|
434 end
|
flickerstreak@1
|
435 if type(addon.title) == "string" then
|
flickerstreak@1
|
436 local num = addon.title:find(" |cff7fff7f %-Ace2%-|r$")
|
flickerstreak@1
|
437 if num then
|
flickerstreak@1
|
438 addon.title = addon.title:sub(1, num - 1)
|
flickerstreak@1
|
439 end
|
flickerstreak@1
|
440 addon.title = addon.title:trim()
|
flickerstreak@1
|
441 end
|
flickerstreak@1
|
442 if addon.notes == nil then
|
flickerstreak@1
|
443 addon.notes = GetAddOnMetadata(name, "Notes")
|
flickerstreak@1
|
444 end
|
flickerstreak@1
|
445 if type(addon.notes) == "string" then
|
flickerstreak@1
|
446 addon.notes = addon.notes:trim()
|
flickerstreak@1
|
447 end
|
flickerstreak@1
|
448 if addon.version == nil then
|
flickerstreak@1
|
449 addon.version = GetAddOnMetadata(name, "Version")
|
flickerstreak@1
|
450 end
|
flickerstreak@1
|
451 if type(addon.version) == "string" then
|
flickerstreak@1
|
452 if addon.version:find("%$Revision: (%d+) %$") then
|
flickerstreak@1
|
453 addon.version = addon.version:gsub("%$Revision: (%d+) %$", "%1")
|
flickerstreak@1
|
454 elseif addon.version:find("%$Rev: (%d+) %$") then
|
flickerstreak@1
|
455 addon.version = addon.version:gsub("%$Rev: (%d+) %$", "%1")
|
flickerstreak@1
|
456 elseif addon.version:find("%$LastChangedRevision: (%d+) %$") then
|
flickerstreak@1
|
457 addon.version = addon.version:gsub("%$LastChangedRevision: (%d+) %$", "%1")
|
flickerstreak@1
|
458 end
|
flickerstreak@1
|
459 addon.version = addon.version:trim()
|
flickerstreak@1
|
460 end
|
flickerstreak@1
|
461 if addon.author == nil then
|
flickerstreak@1
|
462 addon.author = GetAddOnMetadata(name, "Author")
|
flickerstreak@1
|
463 end
|
flickerstreak@1
|
464 if type(addon.author) == "string" then
|
flickerstreak@1
|
465 addon.author = addon.author:trim()
|
flickerstreak@1
|
466 end
|
flickerstreak@1
|
467 if addon.credits == nil then
|
flickerstreak@1
|
468 addon.credits = GetAddOnMetadata(name, "X-Credits")
|
flickerstreak@1
|
469 end
|
flickerstreak@1
|
470 if type(addon.credits) == "string" then
|
flickerstreak@1
|
471 addon.credits = addon.credits:trim()
|
flickerstreak@1
|
472 end
|
flickerstreak@1
|
473 if addon.date == nil then
|
flickerstreak@1
|
474 addon.date = GetAddOnMetadata(name, "X-Date") or GetAddOnMetadata(name, "X-ReleaseDate")
|
flickerstreak@1
|
475 end
|
flickerstreak@1
|
476 if type(addon.date) == "string" then
|
flickerstreak@1
|
477 if addon.date:find("%$Date: (.-) %$") then
|
flickerstreak@1
|
478 addon.date = addon.date:gsub("%$Date: (.-) %$", "%1")
|
flickerstreak@1
|
479 elseif addon.date:find("%$LastChangedDate: (.-) %$") then
|
flickerstreak@1
|
480 addon.date = addon.date:gsub("%$LastChangedDate: (.-) %$", "%1")
|
flickerstreak@1
|
481 end
|
flickerstreak@1
|
482 addon.date = addon.date:trim()
|
flickerstreak@1
|
483 end
|
flickerstreak@1
|
484
|
flickerstreak@1
|
485 if addon.category == nil then
|
flickerstreak@1
|
486 addon.category = GetAddOnMetadata(name, "X-Category")
|
flickerstreak@1
|
487 end
|
flickerstreak@1
|
488 if type(addon.category) == "string" then
|
flickerstreak@1
|
489 addon.category = addon.category:trim()
|
flickerstreak@1
|
490 end
|
flickerstreak@1
|
491 if addon.email == nil then
|
flickerstreak@1
|
492 addon.email = GetAddOnMetadata(name, "X-eMail") or GetAddOnMetadata(name, "X-Email")
|
flickerstreak@1
|
493 end
|
flickerstreak@1
|
494 if type(addon.email) == "string" then
|
flickerstreak@1
|
495 addon.email = addon.email:trim()
|
flickerstreak@1
|
496 end
|
flickerstreak@1
|
497 if addon.website == nil then
|
flickerstreak@1
|
498 addon.website = GetAddOnMetadata(name, "X-Website")
|
flickerstreak@1
|
499 end
|
flickerstreak@1
|
500 if type(addon.website) == "string" then
|
flickerstreak@1
|
501 addon.website = addon.website:trim()
|
flickerstreak@1
|
502 end
|
flickerstreak@1
|
503 end
|
flickerstreak@1
|
504 local current = addon.class
|
flickerstreak@1
|
505 while true do
|
flickerstreak@1
|
506 if current == AceOO.Class then
|
flickerstreak@1
|
507 break
|
flickerstreak@1
|
508 end
|
flickerstreak@1
|
509 if current.mixins then
|
flickerstreak@1
|
510 for mixin in pairs(current.mixins) do
|
flickerstreak@1
|
511 if type(mixin.OnEmbedInitialize) == "function" then
|
flickerstreak@1
|
512 mixin:OnEmbedInitialize(addon, name)
|
flickerstreak@1
|
513 end
|
flickerstreak@1
|
514 end
|
flickerstreak@1
|
515 end
|
flickerstreak@1
|
516 current = current.super
|
flickerstreak@1
|
517 end
|
flickerstreak@1
|
518 if type(addon.OnInitialize) == "function" then
|
flickerstreak@1
|
519 safecall(addon.OnInitialize, addon, name)
|
flickerstreak@1
|
520 end
|
flickerstreak@1
|
521 if AceEvent then
|
flickerstreak@1
|
522 AceEvent:TriggerEvent("Ace2_AddonInitialized", addon)
|
flickerstreak@1
|
523 end
|
flickerstreak@1
|
524 RegisterOnEnable(addon)
|
flickerstreak@1
|
525 end
|
flickerstreak@1
|
526
|
flickerstreak@1
|
527 function AceAddon.prototype:PrintAddonInfo()
|
flickerstreak@1
|
528 local x
|
flickerstreak@1
|
529 if self.title then
|
flickerstreak@1
|
530 x = "|cffffff7f" .. tostring(self.title) .. "|r"
|
flickerstreak@1
|
531 elseif self.name then
|
flickerstreak@1
|
532 x = "|cffffff7f" .. tostring(self.name) .. "|r"
|
flickerstreak@1
|
533 else
|
flickerstreak@1
|
534 x = "|cffffff7f<" .. tostring(self.class) .. " instance>|r"
|
flickerstreak@1
|
535 end
|
flickerstreak@1
|
536 if type(self.IsActive) == "function" then
|
flickerstreak@1
|
537 if not self:IsActive() then
|
flickerstreak@1
|
538 x = x .. " " .. STANDBY
|
flickerstreak@1
|
539 end
|
flickerstreak@1
|
540 end
|
flickerstreak@1
|
541 if self.version then
|
flickerstreak@1
|
542 x = x .. " - |cffffff7f" .. tostring(self.version) .. "|r"
|
flickerstreak@1
|
543 end
|
flickerstreak@1
|
544 if self.notes then
|
flickerstreak@1
|
545 x = x .. " - " .. tostring(self.notes)
|
flickerstreak@1
|
546 end
|
flickerstreak@1
|
547 print(x)
|
flickerstreak@1
|
548 if self.author then
|
flickerstreak@1
|
549 print(" - |cffffff7f" .. AUTHOR .. ":|r " .. tostring(self.author))
|
flickerstreak@1
|
550 end
|
flickerstreak@1
|
551 if self.credits then
|
flickerstreak@1
|
552 print(" - |cffffff7f" .. CREDITS .. ":|r " .. tostring(self.credits))
|
flickerstreak@1
|
553 end
|
flickerstreak@1
|
554 if self.date then
|
flickerstreak@1
|
555 print(" - |cffffff7f" .. DATE .. ":|r " .. tostring(self.date))
|
flickerstreak@1
|
556 end
|
flickerstreak@1
|
557 if self.category then
|
flickerstreak@1
|
558 local category = CATEGORIES[self.category]
|
flickerstreak@1
|
559 if category then
|
flickerstreak@1
|
560 print(" - |cffffff7f" .. CATEGORY .. ":|r " .. category)
|
flickerstreak@1
|
561 end
|
flickerstreak@1
|
562 end
|
flickerstreak@1
|
563 if self.email then
|
flickerstreak@1
|
564 print(" - |cffffff7f" .. EMAIL .. ":|r " .. tostring(self.email))
|
flickerstreak@1
|
565 end
|
flickerstreak@1
|
566 if self.website then
|
flickerstreak@1
|
567 print(" - |cffffff7f" .. WEBSITE .. ":|r " .. tostring(self.website))
|
flickerstreak@1
|
568 end
|
flickerstreak@1
|
569 end
|
flickerstreak@1
|
570
|
flickerstreak@1
|
571 local options
|
flickerstreak@1
|
572 function AceAddon:GetAceOptionsDataTable(target)
|
flickerstreak@1
|
573 if not options then
|
flickerstreak@1
|
574 options = {
|
flickerstreak@1
|
575 about = {
|
flickerstreak@1
|
576 name = ABOUT,
|
flickerstreak@1
|
577 desc = PRINT_ADDON_INFO,
|
flickerstreak@1
|
578 type = "execute",
|
flickerstreak@1
|
579 func = "PrintAddonInfo",
|
flickerstreak@1
|
580 order = -1,
|
flickerstreak@1
|
581 }
|
flickerstreak@1
|
582 }
|
flickerstreak@1
|
583 end
|
flickerstreak@1
|
584 return options
|
flickerstreak@1
|
585 end
|
flickerstreak@1
|
586
|
flickerstreak@1
|
587 function AceAddon:PLAYER_LOGIN()
|
flickerstreak@1
|
588 self.playerLoginFired = true
|
flickerstreak@1
|
589 if self.addonsToOnEnable then
|
flickerstreak@1
|
590 while table.getn(self.addonsToOnEnable) > 0 do
|
flickerstreak@1
|
591 local addon = table.remove(self.addonsToOnEnable, 1)
|
flickerstreak@1
|
592 self.addonsStarted[addon] = true
|
flickerstreak@1
|
593 if (type(addon.IsActive) ~= "function" or addon:IsActive()) and (not AceModuleCore or not AceModuleCore:IsModule(addon) or AceModuleCore:IsModuleActive(addon)) then
|
flickerstreak@1
|
594 local current = addon.class
|
flickerstreak@1
|
595 while true do
|
flickerstreak@1
|
596 if current == AceOO.Class then
|
flickerstreak@1
|
597 break
|
flickerstreak@1
|
598 end
|
flickerstreak@1
|
599 if current.mixins then
|
flickerstreak@1
|
600 for mixin in pairs(current.mixins) do
|
flickerstreak@1
|
601 if type(mixin.OnEmbedEnable) == "function" then
|
flickerstreak@1
|
602 safecall(mixin.OnEmbedEnable,mixin,addon)
|
flickerstreak@1
|
603 end
|
flickerstreak@1
|
604 end
|
flickerstreak@1
|
605 end
|
flickerstreak@1
|
606 current = current.super
|
flickerstreak@1
|
607 end
|
flickerstreak@1
|
608 if type(addon.OnEnable) == "function" then
|
flickerstreak@1
|
609 safecall(addon.OnEnable,addon)
|
flickerstreak@1
|
610 end
|
flickerstreak@1
|
611 if AceEvent then
|
flickerstreak@1
|
612 AceEvent:TriggerEvent("Ace2_AddonEnabled", addon)
|
flickerstreak@1
|
613 end
|
flickerstreak@1
|
614 end
|
flickerstreak@1
|
615 end
|
flickerstreak@1
|
616 self.addonsToOnEnable = nil
|
flickerstreak@1
|
617 end
|
flickerstreak@1
|
618 end
|
flickerstreak@1
|
619
|
flickerstreak@1
|
620 function AceAddon.prototype:Inject(t)
|
flickerstreak@1
|
621 AceAddon:argCheck(t, 2, "table")
|
flickerstreak@1
|
622 for k,v in pairs(t) do
|
flickerstreak@1
|
623 self[k] = v
|
flickerstreak@1
|
624 end
|
flickerstreak@1
|
625 end
|
flickerstreak@1
|
626
|
flickerstreak@1
|
627 function AceAddon.prototype:init()
|
flickerstreak@1
|
628 if not AceEvent then
|
flickerstreak@1
|
629 error(MAJOR_VERSION .. " requires AceEvent-2.0", 4)
|
flickerstreak@1
|
630 end
|
flickerstreak@1
|
631 AceAddon.super.prototype.init(self)
|
flickerstreak@1
|
632
|
flickerstreak@1
|
633 self.super = self.class.prototype
|
flickerstreak@1
|
634
|
flickerstreak@1
|
635 AceAddon:RegisterEvent("ADDON_LOADED", "ADDON_LOADED", true)
|
flickerstreak@1
|
636 table.insert(AceAddon.nextAddon, self)
|
flickerstreak@1
|
637 end
|
flickerstreak@1
|
638
|
flickerstreak@1
|
639 function AceAddon.prototype:ToString()
|
flickerstreak@1
|
640 local x
|
flickerstreak@1
|
641 if type(self.title) == "string" then
|
flickerstreak@1
|
642 x = self.title
|
flickerstreak@1
|
643 elseif type(self.name) == "string" then
|
flickerstreak@1
|
644 x = self.name
|
flickerstreak@1
|
645 else
|
flickerstreak@1
|
646 x = "<" .. tostring(self.class) .. " instance>"
|
flickerstreak@1
|
647 end
|
flickerstreak@1
|
648 if (type(self.IsActive) == "function" and not self:IsActive()) or (AceModuleCore and AceModuleCore:IsModule(addon) and AceModuleCore:IsModuleActive(addon)) then
|
flickerstreak@1
|
649 x = x .. " " .. STANDBY
|
flickerstreak@1
|
650 end
|
flickerstreak@1
|
651 return x
|
flickerstreak@1
|
652 end
|
flickerstreak@1
|
653
|
flickerstreak@1
|
654 AceAddon.new = function(self, ...)
|
flickerstreak@1
|
655 local class = AceAddon:pcall(AceOO.Classpool, self, ...)
|
flickerstreak@1
|
656 return class:new()
|
flickerstreak@1
|
657 end
|
flickerstreak@1
|
658
|
flickerstreak@1
|
659 local function external(self, major, instance)
|
flickerstreak@1
|
660 if major == "AceEvent-2.0" then
|
flickerstreak@1
|
661 AceEvent = instance
|
flickerstreak@1
|
662
|
flickerstreak@1
|
663 AceEvent:embed(self)
|
flickerstreak@1
|
664
|
flickerstreak@1
|
665 self:RegisterEvent("PLAYER_LOGIN", "PLAYER_LOGIN", true)
|
flickerstreak@1
|
666 elseif major == "AceConsole-2.0" then
|
flickerstreak@1
|
667 AceConsole = instance
|
flickerstreak@1
|
668
|
flickerstreak@1
|
669 local slashCommands = { "/ace2" }
|
flickerstreak@1
|
670 local _,_,_,enabled,loadable = GetAddOnInfo("Ace")
|
flickerstreak@1
|
671 if not enabled or not loadable then
|
flickerstreak@1
|
672 table.insert(slashCommands, "/ace")
|
flickerstreak@1
|
673 end
|
flickerstreak@1
|
674 local function listAddon(addon, depth)
|
flickerstreak@1
|
675 if not depth then
|
flickerstreak@1
|
676 depth = 0
|
flickerstreak@1
|
677 end
|
flickerstreak@1
|
678
|
flickerstreak@1
|
679 local s = (" "):rep(depth) .. " - " .. tostring(addon)
|
flickerstreak@1
|
680 if rawget(addon, 'version') then
|
flickerstreak@1
|
681 s = s .. " - |cffffff7f" .. tostring(addon.version) .. "|r"
|
flickerstreak@1
|
682 end
|
flickerstreak@1
|
683 if rawget(addon, 'slashCommand') then
|
flickerstreak@1
|
684 s = s .. " |cffffff7f(" .. tostring(addon.slashCommand) .. ")|r"
|
flickerstreak@1
|
685 end
|
flickerstreak@1
|
686 print(s)
|
flickerstreak@1
|
687 if type(rawget(addon, 'modules')) == "table" then
|
flickerstreak@1
|
688 local i = 0
|
flickerstreak@1
|
689 for k,v in pairs(addon.modules) do
|
flickerstreak@1
|
690 i = i + 1
|
flickerstreak@1
|
691 if i == 6 then
|
flickerstreak@1
|
692 print((" "):rep(depth + 1) .. " - more...")
|
flickerstreak@1
|
693 break
|
flickerstreak@1
|
694 else
|
flickerstreak@1
|
695 listAddon(v, depth + 1)
|
flickerstreak@1
|
696 end
|
flickerstreak@1
|
697 end
|
flickerstreak@1
|
698 end
|
flickerstreak@1
|
699 end
|
flickerstreak@1
|
700 local function listNormalAddon(i)
|
flickerstreak@1
|
701 local name,_,_,enabled,loadable = GetAddOnInfo(i)
|
flickerstreak@1
|
702 if not loadable then
|
flickerstreak@1
|
703 enabled = false
|
flickerstreak@1
|
704 end
|
flickerstreak@1
|
705 if self.addons[name] then
|
flickerstreak@1
|
706 local addon = self.addons[name]
|
flickerstreak@1
|
707 if not AceCoreAddon or not AceCoreAddon:IsModule(addon) then
|
flickerstreak@1
|
708 listAddon(addon)
|
flickerstreak@1
|
709 end
|
flickerstreak@1
|
710 else
|
flickerstreak@1
|
711 local s = " - " .. tostring(GetAddOnMetadata(i, "Title") or name)
|
flickerstreak@1
|
712 local version = GetAddOnMetadata(i, "Version")
|
flickerstreak@1
|
713 if version then
|
flickerstreak@1
|
714 if version:find("%$Revision: (%d+) %$") then
|
flickerstreak@1
|
715 version = version:gsub("%$Revision: (%d+) %$", "%1")
|
flickerstreak@1
|
716 elseif version:find("%$Rev: (%d+) %$") then
|
flickerstreak@1
|
717 version = version:gsub("%$Rev: (%d+) %$", "%1")
|
flickerstreak@1
|
718 elseif version:find("%$LastChangedRevision: (%d+) %$") then
|
flickerstreak@1
|
719 version = version:gsub("%$LastChangedRevision: (%d+) %$", "%1")
|
flickerstreak@1
|
720 end
|
flickerstreak@1
|
721 s = s .. " - |cffffff7f" .. version .. "|r"
|
flickerstreak@1
|
722 end
|
flickerstreak@1
|
723 if not enabled then
|
flickerstreak@1
|
724 s = s .. " |cffff0000(disabled)|r"
|
flickerstreak@1
|
725 end
|
flickerstreak@1
|
726 if IsAddOnLoadOnDemand(i) then
|
flickerstreak@1
|
727 s = s .. " |cff00ff00[LoD]|r"
|
flickerstreak@1
|
728 end
|
flickerstreak@1
|
729 print(s)
|
flickerstreak@1
|
730 end
|
flickerstreak@1
|
731 end
|
flickerstreak@1
|
732 local function mySort(alpha, bravo)
|
flickerstreak@1
|
733 return tostring(alpha) < tostring(bravo)
|
flickerstreak@1
|
734 end
|
flickerstreak@1
|
735 AceConsole.RegisterChatCommand(self, slashCommands, {
|
flickerstreak@1
|
736 desc = "AddOn development framework",
|
flickerstreak@1
|
737 name = "Ace2",
|
flickerstreak@1
|
738 type = "group",
|
flickerstreak@1
|
739 args = {
|
flickerstreak@1
|
740 about = {
|
flickerstreak@1
|
741 desc = "Get information about Ace2",
|
flickerstreak@1
|
742 name = "About",
|
flickerstreak@1
|
743 type = "execute",
|
flickerstreak@1
|
744 func = function()
|
flickerstreak@1
|
745 print("|cffffff7fAce2|r - |cffffff7f2.0." .. MINOR_VERSION:gsub("%$Revision: (%d+) %$", "%1") .. "|r - AddOn development framework")
|
flickerstreak@1
|
746 print(" - |cffffff7f" .. AUTHOR .. ":|r Ace Development Team")
|
flickerstreak@1
|
747 print(" - |cffffff7f" .. WEBSITE .. ":|r http://www.wowace.com/")
|
flickerstreak@1
|
748 end
|
flickerstreak@1
|
749 },
|
flickerstreak@1
|
750 list = {
|
flickerstreak@1
|
751 desc = "List addons",
|
flickerstreak@1
|
752 name = "List",
|
flickerstreak@1
|
753 type = "group",
|
flickerstreak@1
|
754 args = {
|
flickerstreak@1
|
755 ace2 = {
|
flickerstreak@1
|
756 desc = "List addons using Ace2",
|
flickerstreak@1
|
757 name = "Ace2",
|
flickerstreak@1
|
758 type = "execute",
|
flickerstreak@1
|
759 func = function()
|
flickerstreak@1
|
760 print("|cffffff7fAddon list:|r")
|
flickerstreak@1
|
761 local AceCoreAddon = AceLibrary:HasInstance("AceCoreAddon-2.0") and AceLibrary("AceCoreAddon-2.0")
|
flickerstreak@1
|
762 table.sort(self.addons, mySort)
|
flickerstreak@1
|
763 for _,v in ipairs(self.addons) do
|
flickerstreak@1
|
764 if not AceCoreAddon or not AceCoreAddon:IsModule(v) then
|
flickerstreak@1
|
765 listAddon(v)
|
flickerstreak@1
|
766 end
|
flickerstreak@1
|
767 end
|
flickerstreak@1
|
768 end
|
flickerstreak@1
|
769 },
|
flickerstreak@1
|
770 all = {
|
flickerstreak@1
|
771 desc = "List all addons",
|
flickerstreak@1
|
772 name = "All",
|
flickerstreak@1
|
773 type = "execute",
|
flickerstreak@1
|
774 func = function()
|
flickerstreak@1
|
775 print("|cffffff7fAddon list:|r")
|
flickerstreak@1
|
776 local AceCoreAddon = AceLibrary:HasInstance("AceCoreAddon-2.0") and AceLibrary("AceCoreAddon-2.0")
|
flickerstreak@1
|
777 local count = GetNumAddOns()
|
flickerstreak@1
|
778 for i = 1, count do
|
flickerstreak@1
|
779 listNormalAddon(i)
|
flickerstreak@1
|
780 end
|
flickerstreak@1
|
781 end
|
flickerstreak@1
|
782 },
|
flickerstreak@1
|
783 enabled = {
|
flickerstreak@1
|
784 desc = "List all enabled addons",
|
flickerstreak@1
|
785 name = "Enabled",
|
flickerstreak@1
|
786 type = "execute",
|
flickerstreak@1
|
787 func = function()
|
flickerstreak@1
|
788 print("|cffffff7fAddon list:|r")
|
flickerstreak@1
|
789 local AceCoreAddon = AceLibrary:HasInstance("AceCoreAddon-2.0") and AceLibrary("AceCoreAddon-2.0")
|
flickerstreak@1
|
790 local count = GetNumAddOns()
|
flickerstreak@1
|
791 for i = 1, count do
|
flickerstreak@1
|
792 local _,_,_,enabled,loadable = GetAddOnInfo(i)
|
flickerstreak@1
|
793 if enabled and loadable then
|
flickerstreak@1
|
794 listNormalAddon(i)
|
flickerstreak@1
|
795 end
|
flickerstreak@1
|
796 end
|
flickerstreak@1
|
797 end
|
flickerstreak@1
|
798 },
|
flickerstreak@1
|
799 disabled = {
|
flickerstreak@1
|
800 desc = "List all disabled addons",
|
flickerstreak@1
|
801 name = "Disabled",
|
flickerstreak@1
|
802 type = "execute",
|
flickerstreak@1
|
803 func = function()
|
flickerstreak@1
|
804 print("|cffffff7fAddon list:|r")
|
flickerstreak@1
|
805 local AceCoreAddon = AceLibrary:HasInstance("AceCoreAddon-2.0") and AceLibrary("AceCoreAddon-2.0")
|
flickerstreak@1
|
806 local count = GetNumAddOns()
|
flickerstreak@1
|
807 for i = 1, count do
|
flickerstreak@1
|
808 local _,_,_,enabled,loadable = GetAddOnInfo(i)
|
flickerstreak@1
|
809 if not enabled or not loadable then
|
flickerstreak@1
|
810 listNormalAddon(i)
|
flickerstreak@1
|
811 end
|
flickerstreak@1
|
812 end
|
flickerstreak@1
|
813 end
|
flickerstreak@1
|
814 },
|
flickerstreak@1
|
815 lod = {
|
flickerstreak@1
|
816 desc = "List all LoadOnDemand addons",
|
flickerstreak@1
|
817 name = "LoadOnDemand",
|
flickerstreak@1
|
818 type = "execute",
|
flickerstreak@1
|
819 func = function()
|
flickerstreak@1
|
820 print("|cffffff7fAddon list:|r")
|
flickerstreak@1
|
821 local AceCoreAddon = AceLibrary:HasInstance("AceCoreAddon-2.0") and AceLibrary("AceCoreAddon-2.0")
|
flickerstreak@1
|
822 local count = GetNumAddOns()
|
flickerstreak@1
|
823 for i = 1, count do
|
flickerstreak@1
|
824 if IsAddOnLoadOnDemand(i) then
|
flickerstreak@1
|
825 listNormalAddon(i)
|
flickerstreak@1
|
826 end
|
flickerstreak@1
|
827 end
|
flickerstreak@1
|
828 end
|
flickerstreak@1
|
829 },
|
flickerstreak@1
|
830 ace1 = {
|
flickerstreak@1
|
831 desc = "List all addons using Ace1",
|
flickerstreak@1
|
832 name = "Ace 1.x",
|
flickerstreak@1
|
833 type = "execute",
|
flickerstreak@1
|
834 func = function()
|
flickerstreak@1
|
835 print("|cffffff7fAddon list:|r")
|
flickerstreak@1
|
836 local count = GetNumAddOns()
|
flickerstreak@1
|
837 for i = 1, count do
|
flickerstreak@1
|
838 local dep1, dep2, dep3, dep4 = GetAddOnDependencies(i)
|
flickerstreak@1
|
839 if dep1 == "Ace" or dep2 == "Ace" or dep3 == "Ace" or dep4 == "Ace" then
|
flickerstreak@1
|
840 listNormalAddon(i)
|
flickerstreak@1
|
841 end
|
flickerstreak@1
|
842 end
|
flickerstreak@1
|
843 end
|
flickerstreak@1
|
844 },
|
flickerstreak@1
|
845 libs = {
|
flickerstreak@1
|
846 desc = "List all libraries using AceLibrary",
|
flickerstreak@1
|
847 name = "Libraries",
|
flickerstreak@1
|
848 type = "execute",
|
flickerstreak@1
|
849 func = function()
|
flickerstreak@1
|
850 if type(AceLibrary) == "table" and type(AceLibrary.libs) == "table" then
|
flickerstreak@1
|
851 print("|cffffff7fLibrary list:|r")
|
flickerstreak@1
|
852 for name, data in pairs(AceLibrary.libs) do
|
flickerstreak@1
|
853 local s
|
flickerstreak@1
|
854 if data.minor then
|
flickerstreak@1
|
855 s = " - " .. tostring(name) .. "." .. tostring(data.minor)
|
flickerstreak@1
|
856 else
|
flickerstreak@1
|
857 s = " - " .. tostring(name)
|
flickerstreak@1
|
858 end
|
flickerstreak@1
|
859 if rawget(AceLibrary(name), 'slashCommand') then
|
flickerstreak@1
|
860 s = s .. " |cffffff7f(" .. tostring(AceLibrary(name).slashCommand) .. "|cffffff7f)"
|
flickerstreak@1
|
861 end
|
flickerstreak@1
|
862 print(s)
|
flickerstreak@1
|
863 end
|
flickerstreak@1
|
864 end
|
flickerstreak@1
|
865 end
|
flickerstreak@1
|
866 },
|
flickerstreak@1
|
867 search = {
|
flickerstreak@1
|
868 desc = "Search by name",
|
flickerstreak@1
|
869 name = "Search",
|
flickerstreak@1
|
870 type = "text",
|
flickerstreak@1
|
871 usage = "<keyword>",
|
flickerstreak@1
|
872 input = true,
|
flickerstreak@1
|
873 get = false,
|
flickerstreak@1
|
874 set = function(...)
|
flickerstreak@1
|
875 local arg = { ... }
|
flickerstreak@1
|
876 for i,v in ipairs(arg) do
|
flickerstreak@1
|
877 arg[i] = v:gsub('%*', '.*'):gsub('%%', '%%%%'):lower()
|
flickerstreak@1
|
878 end
|
flickerstreak@1
|
879 local count = GetNumAddOns()
|
flickerstreak@1
|
880 for i = 1, count do
|
flickerstreak@1
|
881 local name = GetAddOnInfo(i)
|
flickerstreak@1
|
882 local good = true
|
flickerstreak@1
|
883 for _,v in ipairs(arg) do
|
flickerstreak@1
|
884 if not name:lower():find(v) then
|
flickerstreak@1
|
885 good = false
|
flickerstreak@1
|
886 break
|
flickerstreak@1
|
887 end
|
flickerstreak@1
|
888 end
|
flickerstreak@1
|
889 if good then
|
flickerstreak@1
|
890 listNormalAddon(i)
|
flickerstreak@1
|
891 end
|
flickerstreak@1
|
892 end
|
flickerstreak@1
|
893 end
|
flickerstreak@1
|
894 }
|
flickerstreak@1
|
895 },
|
flickerstreak@1
|
896 },
|
flickerstreak@1
|
897 enable = {
|
flickerstreak@1
|
898 desc = "Enable addon",
|
flickerstreak@1
|
899 name = "Enable",
|
flickerstreak@1
|
900 type = "text",
|
flickerstreak@1
|
901 usage = "<addon>",
|
flickerstreak@1
|
902 get = false,
|
flickerstreak@1
|
903 set = function(text)
|
flickerstreak@1
|
904 local name,title,_,enabled,_,reason = GetAddOnInfo(text)
|
flickerstreak@1
|
905 if reason == "MISSING" then
|
flickerstreak@1
|
906 print(string.format("|cffffff7fAce2:|r AddOn %q does not exist", text))
|
flickerstreak@1
|
907 elseif not enabled then
|
flickerstreak@1
|
908 EnableAddOn(text)
|
flickerstreak@1
|
909 print(string.format("|cffffff7fAce2:|r %s is now enabled", title or name))
|
flickerstreak@1
|
910 else
|
flickerstreak@1
|
911 print(string.format("|cffffff7fAce2:|r %s is already enabled", title or name))
|
flickerstreak@1
|
912 end
|
flickerstreak@1
|
913 end,
|
flickerstreak@1
|
914 },
|
flickerstreak@1
|
915 disable = {
|
flickerstreak@1
|
916 desc = "Disable addon",
|
flickerstreak@1
|
917 name = "Disable",
|
flickerstreak@1
|
918 type = "text",
|
flickerstreak@1
|
919 usage = "<addon>",
|
flickerstreak@1
|
920 get = false,
|
flickerstreak@1
|
921 set = function(text)
|
flickerstreak@1
|
922 local name,title,_,enabled,_,reason = GetAddOnInfo(text)
|
flickerstreak@1
|
923 if reason == "MISSING" then
|
flickerstreak@1
|
924 print(string.format("|cffffff7fAce2:|r AddOn %q does not exist", text))
|
flickerstreak@1
|
925 elseif enabled then
|
flickerstreak@1
|
926 DisableAddOn(text)
|
flickerstreak@1
|
927 print(string.format("|cffffff7fAce2:|r %s is now disabled", title or name))
|
flickerstreak@1
|
928 else
|
flickerstreak@1
|
929 print(string.format("|cffffff7fAce2:|r %s is already disabled", title or name))
|
flickerstreak@1
|
930 end
|
flickerstreak@1
|
931 end,
|
flickerstreak@1
|
932 },
|
flickerstreak@1
|
933 load = {
|
flickerstreak@1
|
934 desc = "Load addon",
|
flickerstreak@1
|
935 name = "Load",
|
flickerstreak@1
|
936 type = "text",
|
flickerstreak@1
|
937 usage = "<addon>",
|
flickerstreak@1
|
938 get = false,
|
flickerstreak@1
|
939 set = function(text)
|
flickerstreak@1
|
940 local name,title,_,_,loadable,reason = GetAddOnInfo(text)
|
flickerstreak@1
|
941 if reason == "MISSING" then
|
flickerstreak@1
|
942 print(string.format("|cffffff7fAce2:|r AddOn %q does not exist.", text))
|
flickerstreak@1
|
943 elseif not loadable then
|
flickerstreak@1
|
944 print(string.format("|cffffff7fAce2:|r AddOn %q is not loadable. Reason: %s", text, reason))
|
flickerstreak@1
|
945 else
|
flickerstreak@1
|
946 LoadAddOn(text)
|
flickerstreak@1
|
947 print(string.format("|cffffff7fAce2:|r %s is now loaded", title or name))
|
flickerstreak@1
|
948 end
|
flickerstreak@1
|
949 end
|
flickerstreak@1
|
950 },
|
flickerstreak@1
|
951 info = {
|
flickerstreak@1
|
952 desc = "Display information",
|
flickerstreak@1
|
953 name = "Information",
|
flickerstreak@1
|
954 type = "execute",
|
flickerstreak@1
|
955 func = function()
|
flickerstreak@1
|
956 local mem, threshold = gcinfo()
|
flickerstreak@1
|
957 print(string.format(" - |cffffff7fMemory usage [|r%.3f MiB|cffffff7f]|r", mem / 1024))
|
flickerstreak@1
|
958 if threshold then
|
flickerstreak@1
|
959 print(string.format(" - |cffffff7fThreshold [|r%.3f MiB|cffffff7f]|r", threshold / 1024))
|
flickerstreak@1
|
960 end
|
flickerstreak@1
|
961 print(string.format(" - |cffffff7fFramerate [|r%.0f fps|cffffff7f]|r", GetFramerate()))
|
flickerstreak@1
|
962 local bandwidthIn, bandwidthOut, latency = GetNetStats()
|
flickerstreak@1
|
963 bandwidthIn, bandwidthOut = floor(bandwidthIn * 1024), floor(bandwidthOut * 1024)
|
flickerstreak@1
|
964 print(string.format(" - |cffffff7fLatency [|r%.0f ms|cffffff7f]|r", latency))
|
flickerstreak@1
|
965 print(string.format(" - |cffffff7fBandwidth in [|r%.0f B/s|cffffff7f]|r", bandwidthIn))
|
flickerstreak@1
|
966 print(string.format(" - |cffffff7fBandwidth out [|r%.0f B/s|cffffff7f]|r", bandwidthOut))
|
flickerstreak@1
|
967 print(string.format(" - |cffffff7fTotal addons [|r%d|cffffff7f]|r", GetNumAddOns()))
|
flickerstreak@1
|
968 print(string.format(" - |cffffff7fAce2 addons [|r%d|cffffff7f]|r", table.getn(self.addons)))
|
flickerstreak@1
|
969 local ace = 0
|
flickerstreak@1
|
970 local enabled = 0
|
flickerstreak@1
|
971 local disabled = 0
|
flickerstreak@1
|
972 local lod = 0
|
flickerstreak@1
|
973 for i = 1, GetNumAddOns() do
|
flickerstreak@1
|
974 local dep1, dep2, dep3, dep4 = GetAddOnDependencies(i)
|
flickerstreak@1
|
975 if dep1 == "Ace" or dep2 == "Ace" or dep3 == "Ace" or dep4 == "Ace" then
|
flickerstreak@1
|
976 ace = ace + 1
|
flickerstreak@1
|
977 end
|
flickerstreak@1
|
978 if IsAddOnLoadOnDemand(i) then
|
flickerstreak@1
|
979 lod = lod + 1
|
flickerstreak@1
|
980 end
|
flickerstreak@1
|
981 local _,_,_,IsActive,loadable = GetAddOnInfo(i)
|
flickerstreak@1
|
982 if not IsActive or not loadable then
|
flickerstreak@1
|
983 disabled = disabled + 1
|
flickerstreak@1
|
984 else
|
flickerstreak@1
|
985 enabled = enabled + 1
|
flickerstreak@1
|
986 end
|
flickerstreak@1
|
987 end
|
flickerstreak@1
|
988 print(string.format(" - |cffffff7fAce 1.x addons [|r%d|cffffff7f]|r", ace))
|
flickerstreak@1
|
989 print(string.format(" - |cffffff7fLoadOnDemand addons [|r%d|cffffff7f]|r", lod))
|
flickerstreak@1
|
990 print(string.format(" - |cffffff7fenabled addons [|r%d|cffffff7f]|r", enabled))
|
flickerstreak@1
|
991 print(string.format(" - |cffffff7fdisabled addons [|r%d|cffffff7f]|r", disabled))
|
flickerstreak@1
|
992 local libs = 0
|
flickerstreak@1
|
993 if type(AceLibrary) == "table" and type(AceLibrary.libs) == "table" then
|
flickerstreak@1
|
994 for _ in pairs(AceLibrary.libs) do
|
flickerstreak@1
|
995 libs = libs + 1
|
flickerstreak@1
|
996 end
|
flickerstreak@1
|
997 end
|
flickerstreak@1
|
998 print(string.format(" - |cffffff7fAceLibrary instances [|r%d|cffffff7f]|r", libs))
|
flickerstreak@1
|
999 end
|
flickerstreak@1
|
1000 }
|
flickerstreak@1
|
1001 }
|
flickerstreak@1
|
1002 })
|
flickerstreak@1
|
1003 elseif major == "AceModuleCore-2.0" then
|
flickerstreak@1
|
1004 AceModuleCore = instance
|
flickerstreak@1
|
1005 end
|
flickerstreak@1
|
1006 end
|
flickerstreak@1
|
1007
|
flickerstreak@1
|
1008 local function activate(self, oldLib, oldDeactivate)
|
flickerstreak@1
|
1009 AceAddon = self
|
flickerstreak@1
|
1010
|
flickerstreak@1
|
1011 if oldLib then
|
flickerstreak@1
|
1012 self.playerLoginFired = oldLib.playerLoginFired or DEFAULT_CHAT_FRAME and DEFAULT_CHAT_FRAME.defaultLanguage
|
flickerstreak@1
|
1013 self.addonsToOnEnable = oldLib.addonsToOnEnable
|
flickerstreak@1
|
1014 self.addons = oldLib.addons
|
flickerstreak@1
|
1015 self.nextAddon = oldLib.nextAddon
|
flickerstreak@1
|
1016 self.addonsStarted = oldLib.addonsStarted
|
flickerstreak@1
|
1017 end
|
flickerstreak@1
|
1018 if not self.addons then
|
flickerstreak@1
|
1019 self.addons = {}
|
flickerstreak@1
|
1020 end
|
flickerstreak@1
|
1021 if not self.nextAddon then
|
flickerstreak@1
|
1022 self.nextAddon = {}
|
flickerstreak@1
|
1023 end
|
flickerstreak@1
|
1024 if not self.addonsStarted then
|
flickerstreak@1
|
1025 self.addonsStarted = {}
|
flickerstreak@1
|
1026 end
|
flickerstreak@1
|
1027 if oldDeactivate then
|
flickerstreak@1
|
1028 oldDeactivate(oldLib)
|
flickerstreak@1
|
1029 end
|
flickerstreak@1
|
1030 end
|
flickerstreak@1
|
1031
|
flickerstreak@1
|
1032 AceLibrary:Register(AceAddon, MAJOR_VERSION, MINOR_VERSION, activate, nil, external)
|