annotate Core.lua @ 84:3bec0ea44607

Cleaned the Inventorium folder; moved all classes to classes directory, modules to modules directory and support addons to plugins directory. In addition support addons are now references within XML files rather than inside the TOC. Fixed the default local item count setting, you can now exclude bag and AH data from it. Fixed some mover algorithm bugs. Mover can no longer freeze the game but instead will terminate the process after a 1000 passes. Now reversing the moves table after making it, rather than every single time it is used. Fixed guild bank support. Now displaying the amount of items moved. Scanner now scans all guild bank tabs rather than only the current. Fixed a bug with local item data not being retrieved properly. Disabled ?enterClicksFirstButton? within dialogs as this causes the dialog to consume all keypress. Events are now at the addon object rather than local.
author Zerotorescue
date Thu, 06 Jan 2011 20:05:30 +0100
parents f885805da5d6
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