annotate Core.lua @ 110:67bd5057ecb7

Implemented vendor restocking with the mover. Comitting so I can always review this working version, but I?ll be disabling all part of it as it is not going to work properly without seriously compromising the code structure. Debug messages are now appended with ?Inventorium? (my MailOpener addon was making stuff difficult). Now properly removing the refill window from the displayed static popup windows list so new popups won?t be aligned at odd locations. Changed ?CreateMoverFrame? to not contain any scenario-specific info. All settings can be set with SetFrameSettings. Items that belong to speciality bags are now put there. Other items now ignore spaciality bags. Implemented test code for mailbox refill support. It has been disabled due to some issues but may be introduced later. The guild withdrawal limit is now taken into consideration. Queue is now reset before scanning again.
author Zerotorescue
date Fri, 14 Jan 2011 23:25:05 +0100
parents d3fbb5676a5e
children 00cf4fc1697f
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@106 13 local sformat, print, pairs, tonumber = _G.string.format, _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@106 45 hideHelp = 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@98 98 addon: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@98 109 addon: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@98 138 addon: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@98 141 addon: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@98 157 addon: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@98 165 addon: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@98 173 addon: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@98 311 addon: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@106 329 function addon:ColorCode(num, required)
Zerotorescue@106 330 local percentage = ( num / required );
Zerotorescue@106 331
Zerotorescue@106 332 if percentage >= addon.db.profile.defaults.colors.green then
Zerotorescue@106 333 return sformat("|cff00ff00%d|r", num);
Zerotorescue@106 334 elseif percentage >= addon.db.profile.defaults.colors.yellow then
Zerotorescue@106 335 return sformat("|cffffff00%d|r", num);
Zerotorescue@106 336 elseif percentage >= addon.db.profile.defaults.colors.orange then
Zerotorescue@106 337 return sformat("|cffff9933%d|r", num);
Zerotorescue@106 338 elseif percentage >= addon.db.profile.defaults.colors.red then
Zerotorescue@106 339 return sformat("|cffff0000%d|r", num);
Zerotorescue@106 340 else
Zerotorescue@106 341 return num;
Zerotorescue@106 342 end
Zerotorescue@106 343 end
Zerotorescue@106 344
Zerotorescue@106 345 function addon:DisplayItemCount(value, minimumStock)
Zerotorescue@106 346 if value == -1 then
Zerotorescue@106 347 return "|cffffff00Unknown|r";
Zerotorescue@106 348 elseif value == -3 then
Zerotorescue@106 349 return "|cffffff00Unknown|r";
Zerotorescue@106 350 else
Zerotorescue@106 351 return sformat("%s / %d", self:ColorCode(value, minimumStock), minimumStock);
Zerotorescue@106 352 end
Zerotorescue@106 353 end
Zerotorescue@106 354
Zerotorescue@62 355 -- Readable money
Zerotorescue@62 356
Zerotorescue@62 357 local goldText = "%s%d|cffffd700g|r ";
Zerotorescue@62 358 local silverText = "%s%d|cffc7c7cfs|r ";
Zerotorescue@62 359 local copperText = "%s%d|cffeda55fc|r";
Zerotorescue@62 360
Zerotorescue@62 361 function addon:ReadableMoney(copper, clean)
Zerotorescue@62 362 local text = "";
Zerotorescue@62 363
Zerotorescue@62 364 local gold = floor( copper / COPPER_PER_GOLD );
Zerotorescue@62 365 if gold > 0 then
Zerotorescue@106 366 text = sformat(goldText, text, gold);
Zerotorescue@62 367 end
Zerotorescue@62 368
Zerotorescue@62 369 if not clean or (not gold or gold < 10) then
Zerotorescue@62 370 local silver = floor( ( copper % COPPER_PER_GOLD ) / COPPER_PER_SILVER );
Zerotorescue@62 371 if silver > 0 then
Zerotorescue@106 372 text = sformat(silverText, text, silver);
Zerotorescue@62 373 end
Zerotorescue@62 374
Zerotorescue@62 375 if not clean or (not gold or gold < 1) then
Zerotorescue@62 376 local copper = floor( copper % COPPER_PER_SILVER );
Zerotorescue@62 377 if copper > 0 or text == "" then
Zerotorescue@106 378 text = sformat(copperText, text, copper);
Zerotorescue@62 379 end
Zerotorescue@62 380 end
Zerotorescue@62 381 end
Zerotorescue@62 382
Zerotorescue@62 383
Zerotorescue@62 384 return string.trim(text);
Zerotorescue@62 385 end
Zerotorescue@62 386
Zerotorescue@62 387 function addon:ReadableMoneyToCopper(value)
Zerotorescue@62 388 -- If a player enters a value it will be filled without color codes
Zerotorescue@62 389 -- If it is retrieved from the database, it will be colored coded
Zerotorescue@62 390 -- Thus we look for both
Zerotorescue@62 391 local gold = tonumber(string.match(value, "(%d+)|c[a-fA-F0-9]+g|r") or string.match(value, "(%d+)g"));
Zerotorescue@62 392 local silver = tonumber(string.match(value, "(%d+)|c[a-fA-F0-9]+s|r") or string.match(value, "(%d+)s"));
Zerotorescue@62 393 local copper = tonumber(string.match(value, "(%d+)|c[a-fA-F0-9]+c|r") or string.match(value, "(%d+)c"));
Zerotorescue@62 394
Zerotorescue@62 395 return ( (gold or 0) * COPPER_PER_GOLD ) + ( (silver or 0) * COPPER_PER_SILVER ) + (copper or 0);
Zerotorescue@62 396 end
Zerotorescue@62 397
Zerotorescue@62 398 function addon:ValidateReadableMoney(info, value)
Zerotorescue@62 399 -- If a player enters a value it will be filled without color codes
Zerotorescue@62 400 -- If it is retrieved from the database, it will be colored coded
Zerotorescue@62 401 -- Thus we look for both
Zerotorescue@62 402 local gold = tonumber(string.match(value, "(%d+)|c[a-fA-F0-9]+g|r") or string.match(value, "(%d+)g"));
Zerotorescue@62 403 local silver = tonumber(string.match(value, "(%d+)|c[a-fA-F0-9]+s|r") or string.match(value, "(%d+)s"));
Zerotorescue@62 404 local copper = tonumber(string.match(value, "(%d+)|c[a-fA-F0-9]+c|r") or string.match(value, "(%d+)c"));
Zerotorescue@62 405
Zerotorescue@62 406 if not gold and not silver and not copper then
Zerotorescue@62 407 return "The provided amount of money is invalid. Please provide the amount of money as #g#s#c, e.g. 591617g24s43c.";
Zerotorescue@62 408 else
Zerotorescue@62 409 return true;
Zerotorescue@62 410 end
Zerotorescue@62 411 end
Zerotorescue@62 412
Zerotorescue@0 413
Zerotorescue@0 414
Zerotorescue@65 415
Zerotorescue@65 416
Zerotorescue@13 417 -- Public
Zerotorescue@13 418
Zerotorescue@36 419 function IMRegisterPricingAddon(name, get, enabled, onSelect)
Zerotorescue@13 420 addon.supportedAddons.auctionPricing[name] = {
Zerotorescue@13 421 GetValue = get,
Zerotorescue@13 422 IsEnabled = enabled,
Zerotorescue@36 423 OnSelect = onSelect,
Zerotorescue@13 424 };
Zerotorescue@13 425 end
Zerotorescue@13 426
Zerotorescue@50 427 function IMRegisterItemCountAddon(name, getTotal, getCharacter, enabled, onSelect)
Zerotorescue@13 428 addon.supportedAddons.itemCount[name] = {
Zerotorescue@17 429 GetTotalCount = getTotal,
Zerotorescue@17 430 GetCharacterCount = getCharacter,
Zerotorescue@13 431 IsEnabled = enabled,
Zerotorescue@50 432 OnSelect = onSelect,
Zerotorescue@13 433 };
Zerotorescue@13 434 end
Zerotorescue@13 435
Zerotorescue@50 436 function IMRegisterCraftingAddon(name, queue, enabled, onSelect)
Zerotorescue@13 437 addon.supportedAddons.crafting[name] = {
Zerotorescue@13 438 Queue = queue,
Zerotorescue@13 439 IsEnabled = enabled,
Zerotorescue@50 440 OnSelect = onSelect,
Zerotorescue@13 441 };
Zerotorescue@13 442 end
Zerotorescue@13 443
Zerotorescue@62 444 -- We need a global command handler for our chat-links
Zerotorescue@62 445 function InventoriumCommandHandler(msg)
Zerotorescue@62 446 addon:CommandHandler(msg);
Zerotorescue@62 447 end
Zerotorescue@62 448
Zerotorescue@13 449
Zerotorescue@13 450
Zerotorescue@65 451
Zerotorescue@65 452
Zerotorescue@76 453 -- General
Zerotorescue@76 454
Zerotorescue@76 455 addon.Colors = {
Zerotorescue@76 456 Red = { 1, 0, 0 },
Zerotorescue@98 457 Orange = { 1, .46, .1 },
Zerotorescue@76 458 Green = { 0, 1, 0 },
Zerotorescue@98 459 Blue = { 0, 0, 1 },
Zerotorescue@98 460 Yellow = { 1, 1, 0 },
Zerotorescue@98 461 Cyan = { 0, 1, 1 },
Zerotorescue@76 462 }; -- easy to extend if more colors are needed
Zerotorescue@76 463 function addon:Print(text, color)
Zerotorescue@76 464 local red, green, blue;
Zerotorescue@76 465
Zerotorescue@76 466 if color then
Zerotorescue@76 467 red, green, blue = color[1], color[2], color[3];
Zerotorescue@76 468 end
Zerotorescue@76 469
Zerotorescue@76 470 DEFAULT_CHAT_FRAME:AddMessage(text or "", red, green, blue, nil, 5);
Zerotorescue@76 471 end
Zerotorescue@76 472
Zerotorescue@95 473 function addon:GetItemId(itemLink)
Zerotorescue@84 474 itemLink = itemLink and itemLink:match("|Hitem:([-0-9]+):"); -- if itemLink is nil, it won't execute the second part
Zerotorescue@84 475 itemLink = itemLink and tonumber(itemLink);
Zerotorescue@84 476
Zerotorescue@84 477 return itemLink;
Zerotorescue@84 478 end
Zerotorescue@84 479
Zerotorescue@13 480 -- Debug
Zerotorescue@0 481
Zerotorescue@89 482 function addon:Debug(t, ...)
Zerotorescue@0 483 if not self.debugChannel and self.debugChannel ~= false then
Zerotorescue@0 484 -- 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 485 self.debugChannel = false;
Zerotorescue@0 486
Zerotorescue@0 487 for i = 1, NUM_CHAT_WINDOWS do
Zerotorescue@0 488 local name = GetChatWindowInfo(i);
Zerotorescue@0 489
Zerotorescue@0 490 if name:upper() == "DEBUG" then
Zerotorescue@0 491 self.debugChannel = _G["ChatFrame" .. i];
Zerotorescue@0 492 end
Zerotorescue@0 493 end
Zerotorescue@0 494 end
Zerotorescue@0 495
Zerotorescue@0 496 if self.debugChannel then
Zerotorescue@110 497 self.debugChannel:AddMessage("|cffffff00Inventorium|r:" .. sformat(t, ...));
Zerotorescue@0 498 end
Zerotorescue@0 499 end