annotate Core.lua @ 140:cd461a41723c

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