annotate Core.lua @ 104:8502f02bf543

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