annotate Core.lua @ 85:e01e6642df57 v0.2.1-BETA

Changelog update.
author Zerotorescue
date Thu, 06 Jan 2011 20:10:01 +0100
parents 3bec0ea44607
children a12d22ef3f39
rev   line source
Zerotorescue@11 1 -- You can access this addon's object through: LibStub("AceAddon-3.0"):GetAddon("Inventorium")
Zerotorescue@17 2 local addon = select(2, ...);
Zerotorescue@17 3 addon = LibStub("AceAddon-3.0"):NewAddon(addon, "Inventorium", "AceEvent-3.0");
Zerotorescue@1 4
Zerotorescue@61 5 --@debug@
Zerotorescue@61 6 local addonRevision = 1;
Zerotorescue@61 7 --@end-debug@
Zerotorescue@61 8 --[===[@non-debug@
Zerotorescue@61 9 local addonRevision = @project-revision@;
Zerotorescue@61 10 --@end-non-debug@]===]
Zerotorescue@61 11
Zerotorescue@62 12 local _G = _G;
Zerotorescue@62 13 local print, pairs, tonumber = _G.print, _G.pairs, _G.tonumber;
Zerotorescue@13 14
Zerotorescue@62 15 -- All modules must be able to retrieve our supported addons database, thus keep it a part of the addon object rather than local
Zerotorescue@13 16 addon.supportedAddons = {};
Zerotorescue@13 17 addon.supportedAddons.auctionPricing = {};
Zerotorescue@13 18 addon.supportedAddons.itemCount = {};
Zerotorescue@13 19 addon.supportedAddons.crafting = {};
Zerotorescue@0 20
Zerotorescue@0 21 function addon:OnInitialize()
Zerotorescue@0 22 self:Debug("OnInitialize");
Zerotorescue@0 23
Zerotorescue@0 24 -- SAVED VARIABLES
Zerotorescue@0 25
Zerotorescue@0 26 local defaults = {
Zerotorescue@0 27 global = {
Zerotorescue@61 28 version = nil,
Zerotorescue@61 29 },
Zerotorescue@61 30 profile = {
Zerotorescue@0 31 defaults = {
Zerotorescue@13 32 auctionPricingAddon = "Auctioneer",
Zerotorescue@13 33 itemCountAddon = "Altoholic",
Zerotorescue@13 34 craftingAddon = "AdvancedTradeSkillWindow",
Zerotorescue@61 35 minLocalStock = 20,
Zerotorescue@57 36 alertBelowLocalMinimum = true,
Zerotorescue@82 37 autoRefill = true,
Zerotorescue@61 38 minGlobalStock = 60,
Zerotorescue@61 39 alertBelowGlobalMinimum = true,
Zerotorescue@0 40 summaryThresholdShow = 10,
Zerotorescue@0 41 restockTarget = 60,
Zerotorescue@0 42 minCraftingQueue = 0.05,
Zerotorescue@0 43 bonusQueue = 0.1,
Zerotorescue@0 44 priceThreshold = 0,
Zerotorescue@13 45 summaryHidePriceThreshold = false,
Zerotorescue@40 46 trackAtCharacters = {
Zerotorescue@40 47 },
Zerotorescue@31 48 localItemData = {
Zerotorescue@31 49 ["Bag"] = true,
Zerotorescue@31 50 ["Auction House"] = true,
Zerotorescue@31 51 },
Zerotorescue@13 52 summary = {
Zerotorescue@13 53 speed = 5,
Zerotorescue@74 54 width = 700,
Zerotorescue@13 55 height = 600,
Zerotorescue@13 56 },
Zerotorescue@0 57 colors = {
Zerotorescue@17 58 red = 0,
Zerotorescue@17 59 orange = 0.3,
Zerotorescue@17 60 yellow = 0.6,
Zerotorescue@17 61 green = 0.95,
Zerotorescue@0 62 },
Zerotorescue@0 63 },
Zerotorescue@61 64 groups = {
Zerotorescue@61 65 },
Zerotorescue@0 66 },
Zerotorescue@0 67 factionrealm = {
Zerotorescue@40 68 characters = {
Zerotorescue@40 69 },
Zerotorescue@0 70 },
Zerotorescue@0 71 };
Zerotorescue@0 72
Zerotorescue@0 73 -- Register our saved variables database
Zerotorescue@11 74 self.db = LibStub("AceDB-3.0"):New("InventoriumDB", defaults, true);
Zerotorescue@61 75
Zerotorescue@62 76 -- SLASH COMMANDS
Zerotorescue@62 77
Zerotorescue@62 78 -- Disable the AddonLoader slash commands
Zerotorescue@62 79 SLASH_INVENTORIUM1 = nil;
Zerotorescue@62 80 SLASH_IM1 = nil;
Zerotorescue@62 81
Zerotorescue@62 82 -- Register our own slash commands
Zerotorescue@62 83 SLASH_INVENTORIUM1 = "/inventorium";
Zerotorescue@62 84 SLASH_INVENTORIUM2 = "/im";
Zerotorescue@62 85 SlashCmdList["INVENTORIUM"] = function(msg)
Zerotorescue@62 86 addon:CommandHandler(msg);
Zerotorescue@62 87 end;
Zerotorescue@62 88
Zerotorescue@62 89 -- Debug command handling
Zerotorescue@62 90 self:RegisterSlash(function(this)
Zerotorescue@62 91 this.debugChannel = false;
Zerotorescue@62 92 for i = 1, NUM_CHAT_WINDOWS do
Zerotorescue@62 93 local name = GetChatWindowInfo(i);
Zerotorescue@62 94
Zerotorescue@62 95 if name:upper() == "DEBUG" then
Zerotorescue@62 96 this.debugChannel = _G["ChatFrame" .. i];
Zerotorescue@62 97
Zerotorescue@62 98 print("A debug channel already exists, used the old one. (" .. i .. ")");
Zerotorescue@62 99 return;
Zerotorescue@62 100 end
Zerotorescue@62 101 end
Zerotorescue@62 102
Zerotorescue@62 103 if not this.debugChannel then
Zerotorescue@62 104 -- Create a new debug channel
Zerotorescue@62 105 local chatFrame = FCF_OpenNewWindow('Debug');
Zerotorescue@62 106 ChatFrame_RemoveAllMessageGroups(chatFrame);
Zerotorescue@62 107 this.debugChannel = chatFrame;
Zerotorescue@62 108
Zerotorescue@62 109 print("New debug channel created.");
Zerotorescue@62 110 end
Zerotorescue@62 111 end, { "d", "debug" });
Zerotorescue@62 112
Zerotorescue@62 113 -- Remember this character is on this account
Zerotorescue@62 114 local playerName = UnitName("player");
Zerotorescue@62 115 if not self.db.factionrealm.characters[playerName] then
Zerotorescue@62 116 self.db.factionrealm.characters[playerName] = true;
Zerotorescue@62 117
Zerotorescue@62 118 -- Default to tracking on all chars, untracking is a convenience, not tracking by default would probably get multiple issue reports.
Zerotorescue@62 119 self.db.profile.defaults.trackAtCharacters[playerName] = true;
Zerotorescue@62 120 end
Zerotorescue@66 121
Zerotorescue@66 122 self:UpdateDatabase();
Zerotorescue@62 123 end
Zerotorescue@62 124
Zerotorescue@65 125
Zerotorescue@65 126
Zerotorescue@65 127
Zerotorescue@65 128
Zerotorescue@65 129 -- Database patching after new revisions
Zerotorescue@65 130
Zerotorescue@62 131 function addon:UpdateDatabase()
Zerotorescue@61 132 if not self.db.global.version or self.db.global.version < addonRevision then
Zerotorescue@61 133 -- Is our database outdated? Then patch it.
Zerotorescue@61 134
Zerotorescue@61 135 if not self.db.global.version then
Zerotorescue@61 136 -- Old version was before version was saved, many changes were done in that revision
Zerotorescue@61 137
Zerotorescue@61 138 print("Updating Inventorium database from version " .. (self.db.global.version or "Unknown") .. " to version " .. addonRevision .. "...");
Zerotorescue@61 139
Zerotorescue@61 140 if self.db.global and self.db.global.defaults then
Zerotorescue@61 141 print("Moving all global data into your current profile...");
Zerotorescue@61 142
Zerotorescue@61 143 -- All data mustn't be global but profile-based
Zerotorescue@61 144 self.db.profile.defaults = CopyTable(self.db.global.defaults);
Zerotorescue@61 145 self.db.profile.groups = CopyTable(self.db.global.groups);
Zerotorescue@61 146
Zerotorescue@61 147 self.db.global.defaults = nil;
Zerotorescue@61 148 self.db.global.groups = nil;
Zerotorescue@61 149
Zerotorescue@62 150 self.CommandHandler = function()
Zerotorescue@62 151 message("You must /reload once to finalize the Inventorium database updates. This will only be required once during the BETA.");
Zerotorescue@61 152 end;
Zerotorescue@62 153 self:CommandHandler();
Zerotorescue@61 154 end
Zerotorescue@61 155
Zerotorescue@61 156 if self.db.profile.defaults.minimumStock then
Zerotorescue@61 157 print("Copying the minimum stock value into the minimum global stock...");
Zerotorescue@61 158
Zerotorescue@61 159 -- We added another stock option and renamed the old to be more obvious about what it means
Zerotorescue@61 160 self.db.profile.defaults.minGlobalStock = self.db.profile.defaults.minimumStock;
Zerotorescue@61 161 self.db.profile.defaults.minimumStock = nil;
Zerotorescue@61 162 end
Zerotorescue@61 163
Zerotorescue@61 164 if self.db.profile.defaults.minimumLocalStock then
Zerotorescue@61 165 print("Renaming the minimum local stock property...");
Zerotorescue@61 166
Zerotorescue@61 167 -- We added another stock option and then renamed it
Zerotorescue@61 168 self.db.profile.defaults.minLocalStock = self.db.profile.defaults.minimumLocalStock;
Zerotorescue@61 169 self.db.profile.defaults.minimumLocalStock = nil;
Zerotorescue@61 170 end
Zerotorescue@61 171
Zerotorescue@61 172 if self.db.profile.defaults.alertBelowMinimum then
Zerotorescue@61 173 print("Copying the alert below minimum value into the alert below global minimum value...");
Zerotorescue@61 174
Zerotorescue@61 175 -- We added another stock option and then renamed it
Zerotorescue@61 176 self.db.profile.defaults.alertBelowGlobalMinimum = self.db.profile.defaults.alertBelowMinimum;
Zerotorescue@61 177 self.db.profile.defaults.alertBelowMinimum = nil;
Zerotorescue@61 178 end
Zerotorescue@61 179
Zerotorescue@61 180 -- Go through all groups to see if there's one with the above two renamed variables
Zerotorescue@61 181 for groupName, values in pairs(self.db.profile.groups) do
Zerotorescue@61 182 if values.minimumStock then
Zerotorescue@61 183 values.minGlobalStock = values.minimumStock;
Zerotorescue@61 184 values.minimumStock = nil;
Zerotorescue@61 185 end
Zerotorescue@61 186 end
Zerotorescue@61 187 end
Zerotorescue@61 188
Zerotorescue@61 189 -- Remember the version of our database
Zerotorescue@61 190 self.db.global.version = addonRevision;
Zerotorescue@61 191 end
Zerotorescue@46 192 end
Zerotorescue@46 193
Zerotorescue@62 194 function addon:GetOptionByKey(groupName, optionName, noDefault)
Zerotorescue@62 195 if groupName and addon.db.profile.groups[groupName] and addon.db.profile.groups[groupName][optionName] ~= nil then
Zerotorescue@62 196 -- If this option exists within the settings of this group
Zerotorescue@62 197
Zerotorescue@62 198 return addon.db.profile.groups[groupName][optionName];
Zerotorescue@62 199 elseif groupName and addon.db.profile.groups[groupName] and addon.db.profile.groups[groupName].virtualGroup ~= "" and not noDefault then
Zerotorescue@62 200 -- If a virtual group was selected
Zerotorescue@62 201
Zerotorescue@62 202 return self:GetOptionByKey(addon.db.profile.groups[groupName].virtualGroup, optionName, noDefault);
Zerotorescue@62 203 elseif addon.db.profile.defaults[optionName] and not noDefault then
Zerotorescue@62 204 return addon.db.profile.defaults[optionName];
Zerotorescue@62 205 else
Zerotorescue@62 206 return nil;
Zerotorescue@0 207 end
Zerotorescue@0 208 end
Zerotorescue@0 209
Zerotorescue@35 210 function addon:GetItemCountAddon(group)
Zerotorescue@35 211 local selectedExternalAddon = self:GetOptionByKey(group, "itemCountAddon");
Zerotorescue@35 212
Zerotorescue@35 213 if self.supportedAddons.itemCount[selectedExternalAddon] and self.supportedAddons.itemCount[selectedExternalAddon].IsEnabled() then
Zerotorescue@35 214 -- Try to use the default item count addon
Zerotorescue@35 215
Zerotorescue@35 216 return self.supportedAddons.itemCount[selectedExternalAddon], selectedExternalAddon;
Zerotorescue@35 217 else
Zerotorescue@35 218 -- Default not available, get the first one then
Zerotorescue@35 219
Zerotorescue@35 220 for name, value in pairs(self.supportedAddons.itemCount) do
Zerotorescue@35 221 if value.IsEnabled() then
Zerotorescue@35 222 return value, name;
Zerotorescue@35 223 end
Zerotorescue@35 224 end
Zerotorescue@35 225 end
Zerotorescue@35 226
Zerotorescue@35 227 return;
Zerotorescue@35 228 end
Zerotorescue@35 229
Zerotorescue@23 230 function addon:GetItemCount(itemId, group)
Zerotorescue@13 231 itemId = tonumber(itemId);
Zerotorescue@13 232
Zerotorescue@13 233 if not itemId then return; end
Zerotorescue@13 234
Zerotorescue@35 235 local itemCountAddon = self:GetItemCountAddon(group);
Zerotorescue@23 236
Zerotorescue@35 237 return (itemCountAddon and itemCountAddon.GetTotalCount(itemId)) or -1;
Zerotorescue@0 238 end
Zerotorescue@0 239
Zerotorescue@50 240 function addon:GetLocalItemCount(itemId, group)
Zerotorescue@50 241 itemId = tonumber(itemId);
Zerotorescue@50 242
Zerotorescue@50 243 if not itemId then return; end
Zerotorescue@50 244
Zerotorescue@50 245 local itemCountAddon = self:GetItemCountAddon(group);
Zerotorescue@50 246
Zerotorescue@50 247 local currentItemCount;
Zerotorescue@50 248
Zerotorescue@50 249 if itemCountAddon and itemCountAddon.GetCharacterCount then
Zerotorescue@50 250 local bag, bank, auctionHouse, mail = itemCountAddon.GetCharacterCount(itemId);
Zerotorescue@50 251
Zerotorescue@50 252 local selectedLocalItemCountSources = self:GetOptionByKey(group, "localItemData");
Zerotorescue@50 253
Zerotorescue@50 254 currentItemCount = 0;
Zerotorescue@50 255 if selectedLocalItemCountSources["Bag"] then
Zerotorescue@50 256 currentItemCount = currentItemCount + bag;
Zerotorescue@50 257 end
Zerotorescue@50 258 if selectedLocalItemCountSources["Bank"] then
Zerotorescue@50 259 currentItemCount = currentItemCount + bank;
Zerotorescue@50 260 end
Zerotorescue@50 261 if selectedLocalItemCountSources["Auction House"] then
Zerotorescue@50 262 currentItemCount = currentItemCount + auctionHouse;
Zerotorescue@50 263 end
Zerotorescue@50 264 if selectedLocalItemCountSources["Mailbox"] then
Zerotorescue@50 265 currentItemCount = currentItemCount + mail;
Zerotorescue@50 266 end
Zerotorescue@50 267 end
Zerotorescue@50 268
Zerotorescue@50 269 return currentItemCount or -1;
Zerotorescue@50 270 end
Zerotorescue@50 271
Zerotorescue@23 272 function addon:GetAuctionValue(itemLink, group)
Zerotorescue@23 273 if not itemLink then return -5; end
Zerotorescue@13 274
Zerotorescue@23 275 local selectedExternalAddon = self:GetOptionByKey(group, "auctionPricingAddon");
Zerotorescue@23 276
Zerotorescue@23 277 if self.supportedAddons.auctionPricing[selectedExternalAddon] and self.supportedAddons.auctionPricing[selectedExternalAddon].IsEnabled() then
Zerotorescue@13 278 -- Try to use the default auction pricing addon
Zerotorescue@1 279
Zerotorescue@23 280 return self.supportedAddons.auctionPricing[selectedExternalAddon].GetValue(itemLink);
Zerotorescue@13 281 else
Zerotorescue@13 282 -- Default not available, get the first one then
Zerotorescue@1 283
Zerotorescue@13 284 for name, value in pairs(self.supportedAddons.auctionPricing) do
Zerotorescue@13 285 if value.IsEnabled() then
Zerotorescue@13 286 return value.GetValue(itemLink);
Zerotorescue@13 287 end
Zerotorescue@1 288 end
Zerotorescue@1 289 end
Zerotorescue@7 290
Zerotorescue@7 291 return -2;
Zerotorescue@1 292 end
Zerotorescue@1 293
Zerotorescue@65 294
Zerotorescue@65 295
Zerotorescue@65 296
Zerotorescue@65 297
Zerotorescue@62 298 -- Slash commands
Zerotorescue@62 299
Zerotorescue@62 300 local slashArgs = {};
Zerotorescue@62 301 local slashError = "Wrong argument, the following arguments are available:";
Zerotorescue@62 302
Zerotorescue@62 303 function addon:CommandHandler(message)
Zerotorescue@62 304 local cmd, arg = string.split(" ", (message or ""), 2);
Zerotorescue@62 305 cmd = string.lower(cmd);
Zerotorescue@62 306
Zerotorescue@62 307 if slashArgs[cmd] then
Zerotorescue@62 308 -- Pass a reference to the addon (to be used as "self") and the provided arg
Zerotorescue@62 309 slashArgs[cmd](addon, arg);
Zerotorescue@62 310 else
Zerotorescue@62 311 print(slashError);
Zerotorescue@62 312 end
Zerotorescue@62 313 end
Zerotorescue@62 314
Zerotorescue@62 315 function addon:RegisterSlash(func, args, description)
Zerotorescue@62 316 for _, arg in pairs(args) do
Zerotorescue@62 317 slashArgs[arg] = func;
Zerotorescue@62 318 end
Zerotorescue@62 319
Zerotorescue@62 320 if description then
Zerotorescue@62 321 slashError = slashError .. "\n" .. description;
Zerotorescue@62 322 end
Zerotorescue@62 323 end
Zerotorescue@62 324
Zerotorescue@65 325
Zerotorescue@65 326
Zerotorescue@65 327
Zerotorescue@65 328
Zerotorescue@62 329 -- Readable money
Zerotorescue@62 330
Zerotorescue@62 331 local goldText = "%s%d|cffffd700g|r ";
Zerotorescue@62 332 local silverText = "%s%d|cffc7c7cfs|r ";
Zerotorescue@62 333 local copperText = "%s%d|cffeda55fc|r";
Zerotorescue@62 334
Zerotorescue@62 335 function addon:ReadableMoney(copper, clean)
Zerotorescue@62 336 local text = "";
Zerotorescue@62 337
Zerotorescue@62 338 local gold = floor( copper / COPPER_PER_GOLD );
Zerotorescue@62 339 if gold > 0 then
Zerotorescue@62 340 text = goldText:format(text, gold);
Zerotorescue@62 341 end
Zerotorescue@62 342
Zerotorescue@62 343 if not clean or (not gold or gold < 10) then
Zerotorescue@62 344 local silver = floor( ( copper % COPPER_PER_GOLD ) / COPPER_PER_SILVER );
Zerotorescue@62 345 if silver > 0 then
Zerotorescue@62 346 text = silverText:format(text, silver);
Zerotorescue@62 347 end
Zerotorescue@62 348
Zerotorescue@62 349 if not clean or (not gold or gold < 1) then
Zerotorescue@62 350 local copper = floor( copper % COPPER_PER_SILVER );
Zerotorescue@62 351 if copper > 0 or text == "" then
Zerotorescue@62 352 text = copperText:format(text, copper);
Zerotorescue@62 353 end
Zerotorescue@62 354 end
Zerotorescue@62 355 end
Zerotorescue@62 356
Zerotorescue@62 357
Zerotorescue@62 358 return string.trim(text);
Zerotorescue@62 359 end
Zerotorescue@62 360
Zerotorescue@62 361 function addon:ReadableMoneyToCopper(value)
Zerotorescue@62 362 -- If a player enters a value it will be filled without color codes
Zerotorescue@62 363 -- If it is retrieved from the database, it will be colored coded
Zerotorescue@62 364 -- Thus we look for both
Zerotorescue@62 365 local gold = tonumber(string.match(value, "(%d+)|c[a-fA-F0-9]+g|r") or string.match(value, "(%d+)g"));
Zerotorescue@62 366 local silver = tonumber(string.match(value, "(%d+)|c[a-fA-F0-9]+s|r") or string.match(value, "(%d+)s"));
Zerotorescue@62 367 local copper = tonumber(string.match(value, "(%d+)|c[a-fA-F0-9]+c|r") or string.match(value, "(%d+)c"));
Zerotorescue@62 368
Zerotorescue@62 369 return ( (gold or 0) * COPPER_PER_GOLD ) + ( (silver or 0) * COPPER_PER_SILVER ) + (copper or 0);
Zerotorescue@62 370 end
Zerotorescue@62 371
Zerotorescue@62 372 function addon:ValidateReadableMoney(info, value)
Zerotorescue@62 373 -- If a player enters a value it will be filled without color codes
Zerotorescue@62 374 -- If it is retrieved from the database, it will be colored coded
Zerotorescue@62 375 -- Thus we look for both
Zerotorescue@62 376 local gold = tonumber(string.match(value, "(%d+)|c[a-fA-F0-9]+g|r") or string.match(value, "(%d+)g"));
Zerotorescue@62 377 local silver = tonumber(string.match(value, "(%d+)|c[a-fA-F0-9]+s|r") or string.match(value, "(%d+)s"));
Zerotorescue@62 378 local copper = tonumber(string.match(value, "(%d+)|c[a-fA-F0-9]+c|r") or string.match(value, "(%d+)c"));
Zerotorescue@62 379
Zerotorescue@62 380 if not gold and not silver and not copper then
Zerotorescue@62 381 return "The provided amount of money is invalid. Please provide the amount of money as #g#s#c, e.g. 591617g24s43c.";
Zerotorescue@62 382 else
Zerotorescue@62 383 return true;
Zerotorescue@62 384 end
Zerotorescue@62 385 end
Zerotorescue@62 386
Zerotorescue@0 387
Zerotorescue@0 388
Zerotorescue@65 389
Zerotorescue@65 390
Zerotorescue@13 391 -- Public
Zerotorescue@13 392
Zerotorescue@36 393 function IMRegisterPricingAddon(name, get, enabled, onSelect)
Zerotorescue@13 394 addon.supportedAddons.auctionPricing[name] = {
Zerotorescue@13 395 GetValue = get,
Zerotorescue@13 396 IsEnabled = enabled,
Zerotorescue@36 397 OnSelect = onSelect,
Zerotorescue@13 398 };
Zerotorescue@13 399 end
Zerotorescue@13 400
Zerotorescue@50 401 function IMRegisterItemCountAddon(name, getTotal, getCharacter, enabled, onSelect)
Zerotorescue@13 402 addon.supportedAddons.itemCount[name] = {
Zerotorescue@17 403 GetTotalCount = getTotal,
Zerotorescue@17 404 GetCharacterCount = getCharacter,
Zerotorescue@13 405 IsEnabled = enabled,
Zerotorescue@50 406 OnSelect = onSelect,
Zerotorescue@13 407 };
Zerotorescue@13 408 end
Zerotorescue@13 409
Zerotorescue@50 410 function IMRegisterCraftingAddon(name, queue, enabled, onSelect)
Zerotorescue@13 411 addon.supportedAddons.crafting[name] = {
Zerotorescue@13 412 Queue = queue,
Zerotorescue@13 413 IsEnabled = enabled,
Zerotorescue@50 414 OnSelect = onSelect,
Zerotorescue@13 415 };
Zerotorescue@13 416 end
Zerotorescue@13 417
Zerotorescue@62 418 -- We need a global command handler for our chat-links
Zerotorescue@62 419 function InventoriumCommandHandler(msg)
Zerotorescue@62 420 addon:CommandHandler(msg);
Zerotorescue@62 421 end
Zerotorescue@62 422
Zerotorescue@13 423
Zerotorescue@13 424
Zerotorescue@65 425
Zerotorescue@65 426
Zerotorescue@76 427 -- General
Zerotorescue@76 428
Zerotorescue@76 429 addon.Colors = {
Zerotorescue@76 430 Red = { 1, 0, 0 },
Zerotorescue@76 431 Green = { 0, 1, 0 },
Zerotorescue@76 432 }; -- easy to extend if more colors are needed
Zerotorescue@76 433 function addon:Print(text, color)
Zerotorescue@76 434 local red, green, blue;
Zerotorescue@76 435
Zerotorescue@76 436 if color then
Zerotorescue@76 437 red, green, blue = color[1], color[2], color[3];
Zerotorescue@76 438 end
Zerotorescue@76 439
Zerotorescue@76 440 DEFAULT_CHAT_FRAME:AddMessage(text or "", red, green, blue, nil, 5);
Zerotorescue@76 441 end
Zerotorescue@76 442
Zerotorescue@84 443 function addon:GetItemID(itemLink)
Zerotorescue@84 444 itemLink = itemLink and itemLink:match("|Hitem:([-0-9]+):"); -- if itemLink is nil, it won't execute the second part
Zerotorescue@84 445 itemLink = itemLink and tonumber(itemLink);
Zerotorescue@84 446
Zerotorescue@84 447 return itemLink;
Zerotorescue@84 448 end
Zerotorescue@84 449
Zerotorescue@13 450 -- Debug
Zerotorescue@0 451
Zerotorescue@0 452 function addon:Debug(t)
Zerotorescue@0 453 if not self.debugChannel and self.debugChannel ~= false then
Zerotorescue@0 454 -- We want to check just once, so if you add a debug channel later just do a /reload (registering an event for this is wasted resources)
Zerotorescue@0 455 self.debugChannel = false;
Zerotorescue@0 456
Zerotorescue@0 457 for i = 1, NUM_CHAT_WINDOWS do
Zerotorescue@0 458 local name = GetChatWindowInfo(i);
Zerotorescue@0 459
Zerotorescue@0 460 if name:upper() == "DEBUG" then
Zerotorescue@0 461 self.debugChannel = _G["ChatFrame" .. i];
Zerotorescue@0 462 end
Zerotorescue@0 463 end
Zerotorescue@0 464 end
Zerotorescue@0 465
Zerotorescue@0 466 if self.debugChannel then
Zerotorescue@0 467 self.debugChannel:AddMessage(t);
Zerotorescue@0 468 end
Zerotorescue@0 469 end