annotate Core.lua @ 65:ac1189599769

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