annotate Core.lua @ 82:f885805da5d6

Added options to toggle the automatic refilling. This defaults to true. Normalized property amount names; a move has a ?num? that must be moved and a location has a ?count? indicating the amount of items at that slot. Target/source item verification should now be working properly for guilds. When ?bank? is included in the local item count, we will skip trying to auto refill from this.
author Zerotorescue
date Thu, 06 Jan 2011 10:48:56 +0100
parents 958aba5f3297
children 3bec0ea44607
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@0 194 function addon:GetItemId(itemLink)
Zerotorescue@13 195 itemLink = itemLink and itemLink:match("|Hitem:([-0-9]+):"); -- if itemLink is nil, it won't execute the second part
Zerotorescue@0 196 itemLink = itemLink and tonumber(itemLink);
Zerotorescue@0 197
Zerotorescue@0 198 return itemLink;
Zerotorescue@0 199 end
Zerotorescue@0 200
Zerotorescue@62 201 function addon:GetOptionByKey(groupName, optionName, noDefault)
Zerotorescue@62 202 if groupName and addon.db.profile.groups[groupName] and addon.db.profile.groups[groupName][optionName] ~= nil then
Zerotorescue@62 203 -- If this option exists within the settings of this group
Zerotorescue@62 204
Zerotorescue@62 205 return addon.db.profile.groups[groupName][optionName];
Zerotorescue@62 206 elseif groupName and addon.db.profile.groups[groupName] and addon.db.profile.groups[groupName].virtualGroup ~= "" and not noDefault then
Zerotorescue@62 207 -- If a virtual group was selected
Zerotorescue@62 208
Zerotorescue@62 209 return self:GetOptionByKey(addon.db.profile.groups[groupName].virtualGroup, optionName, noDefault);
Zerotorescue@62 210 elseif addon.db.profile.defaults[optionName] and not noDefault then
Zerotorescue@62 211 return addon.db.profile.defaults[optionName];
Zerotorescue@62 212 else
Zerotorescue@62 213 return nil;
Zerotorescue@0 214 end
Zerotorescue@0 215 end
Zerotorescue@0 216
Zerotorescue@35 217 function addon:GetItemCountAddon(group)
Zerotorescue@35 218 local selectedExternalAddon = self:GetOptionByKey(group, "itemCountAddon");
Zerotorescue@35 219
Zerotorescue@35 220 if self.supportedAddons.itemCount[selectedExternalAddon] and self.supportedAddons.itemCount[selectedExternalAddon].IsEnabled() then
Zerotorescue@35 221 -- Try to use the default item count addon
Zerotorescue@35 222
Zerotorescue@35 223 return self.supportedAddons.itemCount[selectedExternalAddon], selectedExternalAddon;
Zerotorescue@35 224 else
Zerotorescue@35 225 -- Default not available, get the first one then
Zerotorescue@35 226
Zerotorescue@35 227 for name, value in pairs(self.supportedAddons.itemCount) do
Zerotorescue@35 228 if value.IsEnabled() then
Zerotorescue@35 229 return value, name;
Zerotorescue@35 230 end
Zerotorescue@35 231 end
Zerotorescue@35 232 end
Zerotorescue@35 233
Zerotorescue@35 234 return;
Zerotorescue@35 235 end
Zerotorescue@35 236
Zerotorescue@23 237 function addon:GetItemCount(itemId, group)
Zerotorescue@13 238 itemId = tonumber(itemId);
Zerotorescue@13 239
Zerotorescue@13 240 if not itemId then return; end
Zerotorescue@13 241
Zerotorescue@35 242 local itemCountAddon = self:GetItemCountAddon(group);
Zerotorescue@23 243
Zerotorescue@35 244 return (itemCountAddon and itemCountAddon.GetTotalCount(itemId)) or -1;
Zerotorescue@0 245 end
Zerotorescue@0 246
Zerotorescue@50 247 function addon:GetLocalItemCount(itemId, group)
Zerotorescue@50 248 itemId = tonumber(itemId);
Zerotorescue@50 249
Zerotorescue@50 250 if not itemId then return; end
Zerotorescue@50 251
Zerotorescue@50 252 local itemCountAddon = self:GetItemCountAddon(group);
Zerotorescue@50 253
Zerotorescue@50 254 local currentItemCount;
Zerotorescue@50 255
Zerotorescue@50 256 if itemCountAddon and itemCountAddon.GetCharacterCount then
Zerotorescue@50 257 local bag, bank, auctionHouse, mail = itemCountAddon.GetCharacterCount(itemId);
Zerotorescue@50 258
Zerotorescue@50 259 local selectedLocalItemCountSources = self:GetOptionByKey(group, "localItemData");
Zerotorescue@50 260
Zerotorescue@50 261 currentItemCount = 0;
Zerotorescue@50 262 if selectedLocalItemCountSources["Bag"] then
Zerotorescue@50 263 currentItemCount = currentItemCount + bag;
Zerotorescue@50 264 end
Zerotorescue@50 265 if selectedLocalItemCountSources["Bank"] then
Zerotorescue@50 266 currentItemCount = currentItemCount + bank;
Zerotorescue@50 267 end
Zerotorescue@50 268 if selectedLocalItemCountSources["Auction House"] then
Zerotorescue@50 269 currentItemCount = currentItemCount + auctionHouse;
Zerotorescue@50 270 end
Zerotorescue@50 271 if selectedLocalItemCountSources["Mailbox"] then
Zerotorescue@50 272 currentItemCount = currentItemCount + mail;
Zerotorescue@50 273 end
Zerotorescue@50 274 end
Zerotorescue@50 275
Zerotorescue@50 276 return currentItemCount or -1;
Zerotorescue@50 277 end
Zerotorescue@50 278
Zerotorescue@23 279 function addon:GetAuctionValue(itemLink, group)
Zerotorescue@23 280 if not itemLink then return -5; end
Zerotorescue@13 281
Zerotorescue@23 282 local selectedExternalAddon = self:GetOptionByKey(group, "auctionPricingAddon");
Zerotorescue@23 283
Zerotorescue@23 284 if self.supportedAddons.auctionPricing[selectedExternalAddon] and self.supportedAddons.auctionPricing[selectedExternalAddon].IsEnabled() then
Zerotorescue@13 285 -- Try to use the default auction pricing addon
Zerotorescue@1 286
Zerotorescue@23 287 return self.supportedAddons.auctionPricing[selectedExternalAddon].GetValue(itemLink);
Zerotorescue@13 288 else
Zerotorescue@13 289 -- Default not available, get the first one then
Zerotorescue@1 290
Zerotorescue@13 291 for name, value in pairs(self.supportedAddons.auctionPricing) do
Zerotorescue@13 292 if value.IsEnabled() then
Zerotorescue@13 293 return value.GetValue(itemLink);
Zerotorescue@13 294 end
Zerotorescue@1 295 end
Zerotorescue@1 296 end
Zerotorescue@7 297
Zerotorescue@7 298 return -2;
Zerotorescue@1 299 end
Zerotorescue@1 300
Zerotorescue@65 301
Zerotorescue@65 302
Zerotorescue@65 303
Zerotorescue@65 304
Zerotorescue@62 305 -- Slash commands
Zerotorescue@62 306
Zerotorescue@62 307 local slashArgs = {};
Zerotorescue@62 308 local slashError = "Wrong argument, the following arguments are available:";
Zerotorescue@62 309
Zerotorescue@62 310 function addon:CommandHandler(message)
Zerotorescue@62 311 local cmd, arg = string.split(" ", (message or ""), 2);
Zerotorescue@62 312 cmd = string.lower(cmd);
Zerotorescue@62 313
Zerotorescue@62 314 if slashArgs[cmd] then
Zerotorescue@62 315 -- Pass a reference to the addon (to be used as "self") and the provided arg
Zerotorescue@62 316 slashArgs[cmd](addon, arg);
Zerotorescue@62 317 else
Zerotorescue@62 318 print(slashError);
Zerotorescue@62 319 end
Zerotorescue@62 320 end
Zerotorescue@62 321
Zerotorescue@62 322 function addon:RegisterSlash(func, args, description)
Zerotorescue@62 323 for _, arg in pairs(args) do
Zerotorescue@62 324 slashArgs[arg] = func;
Zerotorescue@62 325 end
Zerotorescue@62 326
Zerotorescue@62 327 if description then
Zerotorescue@62 328 slashError = slashError .. "\n" .. description;
Zerotorescue@62 329 end
Zerotorescue@62 330 end
Zerotorescue@62 331
Zerotorescue@65 332
Zerotorescue@65 333
Zerotorescue@65 334
Zerotorescue@65 335
Zerotorescue@62 336 -- Readable money
Zerotorescue@62 337
Zerotorescue@62 338 local goldText = "%s%d|cffffd700g|r ";
Zerotorescue@62 339 local silverText = "%s%d|cffc7c7cfs|r ";
Zerotorescue@62 340 local copperText = "%s%d|cffeda55fc|r";
Zerotorescue@62 341
Zerotorescue@62 342 function addon:ReadableMoney(copper, clean)
Zerotorescue@62 343 local text = "";
Zerotorescue@62 344
Zerotorescue@62 345 local gold = floor( copper / COPPER_PER_GOLD );
Zerotorescue@62 346 if gold > 0 then
Zerotorescue@62 347 text = goldText:format(text, gold);
Zerotorescue@62 348 end
Zerotorescue@62 349
Zerotorescue@62 350 if not clean or (not gold or gold < 10) then
Zerotorescue@62 351 local silver = floor( ( copper % COPPER_PER_GOLD ) / COPPER_PER_SILVER );
Zerotorescue@62 352 if silver > 0 then
Zerotorescue@62 353 text = silverText:format(text, silver);
Zerotorescue@62 354 end
Zerotorescue@62 355
Zerotorescue@62 356 if not clean or (not gold or gold < 1) then
Zerotorescue@62 357 local copper = floor( copper % COPPER_PER_SILVER );
Zerotorescue@62 358 if copper > 0 or text == "" then
Zerotorescue@62 359 text = copperText:format(text, copper);
Zerotorescue@62 360 end
Zerotorescue@62 361 end
Zerotorescue@62 362 end
Zerotorescue@62 363
Zerotorescue@62 364
Zerotorescue@62 365 return string.trim(text);
Zerotorescue@62 366 end
Zerotorescue@62 367
Zerotorescue@62 368 function addon:ReadableMoneyToCopper(value)
Zerotorescue@62 369 -- If a player enters a value it will be filled without color codes
Zerotorescue@62 370 -- If it is retrieved from the database, it will be colored coded
Zerotorescue@62 371 -- Thus we look for both
Zerotorescue@62 372 local gold = tonumber(string.match(value, "(%d+)|c[a-fA-F0-9]+g|r") or string.match(value, "(%d+)g"));
Zerotorescue@62 373 local silver = tonumber(string.match(value, "(%d+)|c[a-fA-F0-9]+s|r") or string.match(value, "(%d+)s"));
Zerotorescue@62 374 local copper = tonumber(string.match(value, "(%d+)|c[a-fA-F0-9]+c|r") or string.match(value, "(%d+)c"));
Zerotorescue@62 375
Zerotorescue@62 376 return ( (gold or 0) * COPPER_PER_GOLD ) + ( (silver or 0) * COPPER_PER_SILVER ) + (copper or 0);
Zerotorescue@62 377 end
Zerotorescue@62 378
Zerotorescue@62 379 function addon:ValidateReadableMoney(info, value)
Zerotorescue@62 380 -- If a player enters a value it will be filled without color codes
Zerotorescue@62 381 -- If it is retrieved from the database, it will be colored coded
Zerotorescue@62 382 -- Thus we look for both
Zerotorescue@62 383 local gold = tonumber(string.match(value, "(%d+)|c[a-fA-F0-9]+g|r") or string.match(value, "(%d+)g"));
Zerotorescue@62 384 local silver = tonumber(string.match(value, "(%d+)|c[a-fA-F0-9]+s|r") or string.match(value, "(%d+)s"));
Zerotorescue@62 385 local copper = tonumber(string.match(value, "(%d+)|c[a-fA-F0-9]+c|r") or string.match(value, "(%d+)c"));
Zerotorescue@62 386
Zerotorescue@62 387 if not gold and not silver and not copper then
Zerotorescue@62 388 return "The provided amount of money is invalid. Please provide the amount of money as #g#s#c, e.g. 591617g24s43c.";
Zerotorescue@62 389 else
Zerotorescue@62 390 return true;
Zerotorescue@62 391 end
Zerotorescue@62 392 end
Zerotorescue@62 393
Zerotorescue@0 394
Zerotorescue@0 395
Zerotorescue@65 396
Zerotorescue@65 397
Zerotorescue@13 398 -- Public
Zerotorescue@13 399
Zerotorescue@36 400 function IMRegisterPricingAddon(name, get, enabled, onSelect)
Zerotorescue@13 401 addon.supportedAddons.auctionPricing[name] = {
Zerotorescue@13 402 GetValue = get,
Zerotorescue@13 403 IsEnabled = enabled,
Zerotorescue@36 404 OnSelect = onSelect,
Zerotorescue@13 405 };
Zerotorescue@13 406 end
Zerotorescue@13 407
Zerotorescue@50 408 function IMRegisterItemCountAddon(name, getTotal, getCharacter, enabled, onSelect)
Zerotorescue@13 409 addon.supportedAddons.itemCount[name] = {
Zerotorescue@17 410 GetTotalCount = getTotal,
Zerotorescue@17 411 GetCharacterCount = getCharacter,
Zerotorescue@13 412 IsEnabled = enabled,
Zerotorescue@50 413 OnSelect = onSelect,
Zerotorescue@13 414 };
Zerotorescue@13 415 end
Zerotorescue@13 416
Zerotorescue@50 417 function IMRegisterCraftingAddon(name, queue, enabled, onSelect)
Zerotorescue@13 418 addon.supportedAddons.crafting[name] = {
Zerotorescue@13 419 Queue = queue,
Zerotorescue@13 420 IsEnabled = enabled,
Zerotorescue@50 421 OnSelect = onSelect,
Zerotorescue@13 422 };
Zerotorescue@13 423 end
Zerotorescue@13 424
Zerotorescue@62 425 -- We need a global command handler for our chat-links
Zerotorescue@62 426 function InventoriumCommandHandler(msg)
Zerotorescue@62 427 addon:CommandHandler(msg);
Zerotorescue@62 428 end
Zerotorescue@62 429
Zerotorescue@13 430
Zerotorescue@13 431
Zerotorescue@65 432
Zerotorescue@65 433
Zerotorescue@76 434 -- General
Zerotorescue@76 435
Zerotorescue@76 436 addon.Colors = {
Zerotorescue@76 437 Red = { 1, 0, 0 },
Zerotorescue@76 438 Green = { 0, 1, 0 },
Zerotorescue@76 439 }; -- easy to extend if more colors are needed
Zerotorescue@76 440 function addon:Print(text, color)
Zerotorescue@76 441 local red, green, blue;
Zerotorescue@76 442
Zerotorescue@76 443 if color then
Zerotorescue@76 444 red, green, blue = color[1], color[2], color[3];
Zerotorescue@76 445 end
Zerotorescue@76 446
Zerotorescue@76 447 DEFAULT_CHAT_FRAME:AddMessage(text or "", red, green, blue, nil, 5);
Zerotorescue@76 448 end
Zerotorescue@76 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