annotate Core.lua @ 143:8eb0f5b5a885

Fixed ?fully stocked? tooltip to say it uses the restock target setting rather than the global stock setting. Making sure the inventorium queuer frame is available before hiding it. Fixed an error with queueing items. Skip reasons are now sorted by importance (also by default). Now closing the queue window when you close your profession window.
author Zerotorescue
date Tue, 18 Jan 2011 23:48:16 +0100
parents cd461a41723c
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