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@66
|
120
|
Zerotorescue@66
|
121 self:UpdateDatabase();
|
Zerotorescue@62
|
122 end
|
Zerotorescue@62
|
123
|
Zerotorescue@65
|
124
|
Zerotorescue@65
|
125
|
Zerotorescue@65
|
126
|
Zerotorescue@65
|
127
|
Zerotorescue@65
|
128 -- Database patching after new revisions
|
Zerotorescue@65
|
129
|
Zerotorescue@62
|
130 function addon:UpdateDatabase()
|
Zerotorescue@61
|
131 if not self.db.global.version or self.db.global.version < addonRevision then
|
Zerotorescue@61
|
132 -- Is our database outdated? Then patch it.
|
Zerotorescue@61
|
133
|
Zerotorescue@61
|
134 if not self.db.global.version then
|
Zerotorescue@61
|
135 -- Old version was before version was saved, many changes were done in that revision
|
Zerotorescue@61
|
136
|
Zerotorescue@61
|
137 print("Updating Inventorium database from version " .. (self.db.global.version or "Unknown") .. " to version " .. addonRevision .. "...");
|
Zerotorescue@61
|
138
|
Zerotorescue@61
|
139 if self.db.global and self.db.global.defaults then
|
Zerotorescue@61
|
140 print("Moving all global data into your current profile...");
|
Zerotorescue@61
|
141
|
Zerotorescue@61
|
142 -- All data mustn't be global but profile-based
|
Zerotorescue@61
|
143 self.db.profile.defaults = CopyTable(self.db.global.defaults);
|
Zerotorescue@61
|
144 self.db.profile.groups = CopyTable(self.db.global.groups);
|
Zerotorescue@61
|
145
|
Zerotorescue@61
|
146 self.db.global.defaults = nil;
|
Zerotorescue@61
|
147 self.db.global.groups = nil;
|
Zerotorescue@61
|
148
|
Zerotorescue@62
|
149 self.CommandHandler = function()
|
Zerotorescue@62
|
150 message("You must /reload once to finalize the Inventorium database updates. This will only be required once during the BETA.");
|
Zerotorescue@61
|
151 end;
|
Zerotorescue@62
|
152 self:CommandHandler();
|
Zerotorescue@61
|
153 end
|
Zerotorescue@61
|
154
|
Zerotorescue@61
|
155 if self.db.profile.defaults.minimumStock then
|
Zerotorescue@61
|
156 print("Copying the minimum stock value into the minimum global stock...");
|
Zerotorescue@61
|
157
|
Zerotorescue@61
|
158 -- We added another stock option and renamed the old to be more obvious about what it means
|
Zerotorescue@61
|
159 self.db.profile.defaults.minGlobalStock = self.db.profile.defaults.minimumStock;
|
Zerotorescue@61
|
160 self.db.profile.defaults.minimumStock = nil;
|
Zerotorescue@61
|
161 end
|
Zerotorescue@61
|
162
|
Zerotorescue@61
|
163 if self.db.profile.defaults.minimumLocalStock then
|
Zerotorescue@61
|
164 print("Renaming the minimum local stock property...");
|
Zerotorescue@61
|
165
|
Zerotorescue@61
|
166 -- We added another stock option and then renamed it
|
Zerotorescue@61
|
167 self.db.profile.defaults.minLocalStock = self.db.profile.defaults.minimumLocalStock;
|
Zerotorescue@61
|
168 self.db.profile.defaults.minimumLocalStock = nil;
|
Zerotorescue@61
|
169 end
|
Zerotorescue@61
|
170
|
Zerotorescue@61
|
171 if self.db.profile.defaults.alertBelowMinimum then
|
Zerotorescue@61
|
172 print("Copying the alert below minimum value into the alert below global minimum value...");
|
Zerotorescue@61
|
173
|
Zerotorescue@61
|
174 -- We added another stock option and then renamed it
|
Zerotorescue@61
|
175 self.db.profile.defaults.alertBelowGlobalMinimum = self.db.profile.defaults.alertBelowMinimum;
|
Zerotorescue@61
|
176 self.db.profile.defaults.alertBelowMinimum = nil;
|
Zerotorescue@61
|
177 end
|
Zerotorescue@61
|
178
|
Zerotorescue@61
|
179 -- Go through all groups to see if there's one with the above two renamed variables
|
Zerotorescue@61
|
180 for groupName, values in pairs(self.db.profile.groups) do
|
Zerotorescue@61
|
181 if values.minimumStock then
|
Zerotorescue@61
|
182 values.minGlobalStock = values.minimumStock;
|
Zerotorescue@61
|
183 values.minimumStock = nil;
|
Zerotorescue@61
|
184 end
|
Zerotorescue@61
|
185 end
|
Zerotorescue@61
|
186 end
|
Zerotorescue@61
|
187
|
Zerotorescue@61
|
188 -- Remember the version of our database
|
Zerotorescue@61
|
189 self.db.global.version = addonRevision;
|
Zerotorescue@61
|
190 end
|
Zerotorescue@46
|
191 end
|
Zerotorescue@46
|
192
|
Zerotorescue@0
|
193 function addon:GetItemId(itemLink)
|
Zerotorescue@13
|
194 itemLink = itemLink and itemLink:match("|Hitem:([-0-9]+):"); -- if itemLink is nil, it won't execute the second part
|
Zerotorescue@0
|
195 itemLink = itemLink and tonumber(itemLink);
|
Zerotorescue@0
|
196
|
Zerotorescue@0
|
197 return itemLink;
|
Zerotorescue@0
|
198 end
|
Zerotorescue@0
|
199
|
Zerotorescue@62
|
200 function addon:GetOptionByKey(groupName, optionName, noDefault)
|
Zerotorescue@62
|
201 if groupName and addon.db.profile.groups[groupName] and addon.db.profile.groups[groupName][optionName] ~= nil then
|
Zerotorescue@62
|
202 -- If this option exists within the settings of this group
|
Zerotorescue@62
|
203
|
Zerotorescue@62
|
204 return addon.db.profile.groups[groupName][optionName];
|
Zerotorescue@62
|
205 elseif groupName and addon.db.profile.groups[groupName] and addon.db.profile.groups[groupName].virtualGroup ~= "" and not noDefault then
|
Zerotorescue@62
|
206 -- If a virtual group was selected
|
Zerotorescue@62
|
207
|
Zerotorescue@62
|
208 return self:GetOptionByKey(addon.db.profile.groups[groupName].virtualGroup, optionName, noDefault);
|
Zerotorescue@62
|
209 elseif addon.db.profile.defaults[optionName] and not noDefault then
|
Zerotorescue@62
|
210 return addon.db.profile.defaults[optionName];
|
Zerotorescue@62
|
211 else
|
Zerotorescue@62
|
212 return nil;
|
Zerotorescue@0
|
213 end
|
Zerotorescue@0
|
214 end
|
Zerotorescue@0
|
215
|
Zerotorescue@35
|
216 function addon:GetItemCountAddon(group)
|
Zerotorescue@35
|
217 local selectedExternalAddon = self:GetOptionByKey(group, "itemCountAddon");
|
Zerotorescue@35
|
218
|
Zerotorescue@35
|
219 if self.supportedAddons.itemCount[selectedExternalAddon] and self.supportedAddons.itemCount[selectedExternalAddon].IsEnabled() then
|
Zerotorescue@35
|
220 -- Try to use the default item count addon
|
Zerotorescue@35
|
221
|
Zerotorescue@35
|
222 return self.supportedAddons.itemCount[selectedExternalAddon], selectedExternalAddon;
|
Zerotorescue@35
|
223 else
|
Zerotorescue@35
|
224 -- Default not available, get the first one then
|
Zerotorescue@35
|
225
|
Zerotorescue@35
|
226 for name, value in pairs(self.supportedAddons.itemCount) do
|
Zerotorescue@35
|
227 if value.IsEnabled() then
|
Zerotorescue@35
|
228 return value, name;
|
Zerotorescue@35
|
229 end
|
Zerotorescue@35
|
230 end
|
Zerotorescue@35
|
231 end
|
Zerotorescue@35
|
232
|
Zerotorescue@35
|
233 return;
|
Zerotorescue@35
|
234 end
|
Zerotorescue@35
|
235
|
Zerotorescue@23
|
236 function addon:GetItemCount(itemId, group)
|
Zerotorescue@13
|
237 itemId = tonumber(itemId);
|
Zerotorescue@13
|
238
|
Zerotorescue@13
|
239 if not itemId then return; end
|
Zerotorescue@13
|
240
|
Zerotorescue@35
|
241 local itemCountAddon = self:GetItemCountAddon(group);
|
Zerotorescue@23
|
242
|
Zerotorescue@35
|
243 return (itemCountAddon and itemCountAddon.GetTotalCount(itemId)) or -1;
|
Zerotorescue@0
|
244 end
|
Zerotorescue@0
|
245
|
Zerotorescue@50
|
246 function addon:GetLocalItemCount(itemId, group)
|
Zerotorescue@50
|
247 itemId = tonumber(itemId);
|
Zerotorescue@50
|
248
|
Zerotorescue@50
|
249 if not itemId then return; end
|
Zerotorescue@50
|
250
|
Zerotorescue@50
|
251 local itemCountAddon = self:GetItemCountAddon(group);
|
Zerotorescue@50
|
252
|
Zerotorescue@50
|
253 local currentItemCount;
|
Zerotorescue@50
|
254
|
Zerotorescue@50
|
255 if itemCountAddon and itemCountAddon.GetCharacterCount then
|
Zerotorescue@50
|
256 local bag, bank, auctionHouse, mail = itemCountAddon.GetCharacterCount(itemId);
|
Zerotorescue@50
|
257
|
Zerotorescue@50
|
258 local selectedLocalItemCountSources = self:GetOptionByKey(group, "localItemData");
|
Zerotorescue@50
|
259
|
Zerotorescue@50
|
260 currentItemCount = 0;
|
Zerotorescue@50
|
261 if selectedLocalItemCountSources["Bag"] then
|
Zerotorescue@50
|
262 currentItemCount = currentItemCount + bag;
|
Zerotorescue@50
|
263 end
|
Zerotorescue@50
|
264 if selectedLocalItemCountSources["Bank"] then
|
Zerotorescue@50
|
265 currentItemCount = currentItemCount + bank;
|
Zerotorescue@50
|
266 end
|
Zerotorescue@50
|
267 if selectedLocalItemCountSources["Auction House"] then
|
Zerotorescue@50
|
268 currentItemCount = currentItemCount + auctionHouse;
|
Zerotorescue@50
|
269 end
|
Zerotorescue@50
|
270 if selectedLocalItemCountSources["Mailbox"] then
|
Zerotorescue@50
|
271 currentItemCount = currentItemCount + mail;
|
Zerotorescue@50
|
272 end
|
Zerotorescue@50
|
273 end
|
Zerotorescue@50
|
274
|
Zerotorescue@50
|
275 return currentItemCount or -1;
|
Zerotorescue@50
|
276 end
|
Zerotorescue@50
|
277
|
Zerotorescue@23
|
278 function addon:GetAuctionValue(itemLink, group)
|
Zerotorescue@23
|
279 if not itemLink then return -5; end
|
Zerotorescue@13
|
280
|
Zerotorescue@23
|
281 local selectedExternalAddon = self:GetOptionByKey(group, "auctionPricingAddon");
|
Zerotorescue@23
|
282
|
Zerotorescue@23
|
283 if self.supportedAddons.auctionPricing[selectedExternalAddon] and self.supportedAddons.auctionPricing[selectedExternalAddon].IsEnabled() then
|
Zerotorescue@13
|
284 -- Try to use the default auction pricing addon
|
Zerotorescue@1
|
285
|
Zerotorescue@23
|
286 return self.supportedAddons.auctionPricing[selectedExternalAddon].GetValue(itemLink);
|
Zerotorescue@13
|
287 else
|
Zerotorescue@13
|
288 -- Default not available, get the first one then
|
Zerotorescue@1
|
289
|
Zerotorescue@13
|
290 for name, value in pairs(self.supportedAddons.auctionPricing) do
|
Zerotorescue@13
|
291 if value.IsEnabled() then
|
Zerotorescue@13
|
292 return value.GetValue(itemLink);
|
Zerotorescue@13
|
293 end
|
Zerotorescue@1
|
294 end
|
Zerotorescue@1
|
295 end
|
Zerotorescue@7
|
296
|
Zerotorescue@7
|
297 return -2;
|
Zerotorescue@1
|
298 end
|
Zerotorescue@1
|
299
|
Zerotorescue@65
|
300
|
Zerotorescue@65
|
301
|
Zerotorescue@65
|
302
|
Zerotorescue@65
|
303
|
Zerotorescue@62
|
304 -- Slash commands
|
Zerotorescue@62
|
305
|
Zerotorescue@62
|
306 local slashArgs = {};
|
Zerotorescue@62
|
307 local slashError = "Wrong argument, the following arguments are available:";
|
Zerotorescue@62
|
308
|
Zerotorescue@62
|
309 function addon:CommandHandler(message)
|
Zerotorescue@62
|
310 local cmd, arg = string.split(" ", (message or ""), 2);
|
Zerotorescue@62
|
311 cmd = string.lower(cmd);
|
Zerotorescue@62
|
312
|
Zerotorescue@62
|
313 if slashArgs[cmd] then
|
Zerotorescue@62
|
314 -- Pass a reference to the addon (to be used as "self") and the provided arg
|
Zerotorescue@62
|
315 slashArgs[cmd](addon, arg);
|
Zerotorescue@62
|
316 else
|
Zerotorescue@62
|
317 print(slashError);
|
Zerotorescue@62
|
318 end
|
Zerotorescue@62
|
319 end
|
Zerotorescue@62
|
320
|
Zerotorescue@62
|
321 function addon:RegisterSlash(func, args, description)
|
Zerotorescue@62
|
322 for _, arg in pairs(args) do
|
Zerotorescue@62
|
323 slashArgs[arg] = func;
|
Zerotorescue@62
|
324 end
|
Zerotorescue@62
|
325
|
Zerotorescue@62
|
326 if description then
|
Zerotorescue@62
|
327 slashError = slashError .. "\n" .. description;
|
Zerotorescue@62
|
328 end
|
Zerotorescue@62
|
329 end
|
Zerotorescue@62
|
330
|
Zerotorescue@65
|
331
|
Zerotorescue@65
|
332
|
Zerotorescue@65
|
333
|
Zerotorescue@65
|
334
|
Zerotorescue@62
|
335 -- Group functions
|
Zerotorescue@62
|
336
|
Zerotorescue@62
|
337 function addon:InGroup(itemId)
|
Zerotorescue@62
|
338 -- Go through all groups to see if this item is already somewhere
|
Zerotorescue@62
|
339 for groupName, values in pairs(addon.db.profile.groups) do
|
Zerotorescue@62
|
340 if values.items and values.items[itemId] then
|
Zerotorescue@62
|
341 return groupName;
|
Zerotorescue@62
|
342 end
|
Zerotorescue@62
|
343 end
|
Zerotorescue@62
|
344
|
Zerotorescue@62
|
345 return;
|
Zerotorescue@62
|
346 end
|
Zerotorescue@62
|
347
|
Zerotorescue@62
|
348 function addon:AddItemToGroup(groupName, itemId)
|
Zerotorescue@62
|
349 if self:InGroup(itemId) then
|
Zerotorescue@62
|
350 return false;
|
Zerotorescue@62
|
351 end
|
Zerotorescue@62
|
352
|
Zerotorescue@62
|
353 if not addon.db.profile.groups[groupName].items then
|
Zerotorescue@62
|
354 addon.db.profile.groups[groupName].items = {};
|
Zerotorescue@62
|
355 end
|
Zerotorescue@62
|
356
|
Zerotorescue@62
|
357 -- Set this item
|
Zerotorescue@62
|
358 addon.db.profile.groups[groupName].items[itemId] = true;
|
Zerotorescue@62
|
359
|
Zerotorescue@62
|
360 if AceConfigRegistry then
|
Zerotorescue@62
|
361 -- Now rebuild the list
|
Zerotorescue@62
|
362 AceConfigRegistry:NotifyChange("InventoriumOptions");
|
Zerotorescue@62
|
363 end
|
Zerotorescue@62
|
364
|
Zerotorescue@62
|
365 return true;
|
Zerotorescue@62
|
366 end
|
Zerotorescue@62
|
367
|
Zerotorescue@62
|
368 function addon:RemoveItemFromGroup(groupName, itemId)
|
Zerotorescue@62
|
369 if self:InGroup(itemId) ~= groupName then
|
Zerotorescue@62
|
370 return false;
|
Zerotorescue@62
|
371 end
|
Zerotorescue@62
|
372
|
Zerotorescue@62
|
373 -- Unset this item
|
Zerotorescue@62
|
374 addon.db.profile.groups[groupName].items[itemId] = nil;
|
Zerotorescue@62
|
375
|
Zerotorescue@62
|
376 return true;
|
Zerotorescue@62
|
377 end
|
Zerotorescue@62
|
378
|
Zerotorescue@65
|
379
|
Zerotorescue@65
|
380
|
Zerotorescue@65
|
381
|
Zerotorescue@65
|
382
|
Zerotorescue@62
|
383 -- Readable money
|
Zerotorescue@62
|
384
|
Zerotorescue@62
|
385 local goldText = "%s%d|cffffd700g|r ";
|
Zerotorescue@62
|
386 local silverText = "%s%d|cffc7c7cfs|r ";
|
Zerotorescue@62
|
387 local copperText = "%s%d|cffeda55fc|r";
|
Zerotorescue@62
|
388
|
Zerotorescue@62
|
389 function addon:ReadableMoney(copper, clean)
|
Zerotorescue@62
|
390 local text = "";
|
Zerotorescue@62
|
391
|
Zerotorescue@62
|
392 local gold = floor( copper / COPPER_PER_GOLD );
|
Zerotorescue@62
|
393 if gold > 0 then
|
Zerotorescue@62
|
394 text = goldText:format(text, gold);
|
Zerotorescue@62
|
395 end
|
Zerotorescue@62
|
396
|
Zerotorescue@62
|
397 if not clean or (not gold or gold < 10) then
|
Zerotorescue@62
|
398 local silver = floor( ( copper % COPPER_PER_GOLD ) / COPPER_PER_SILVER );
|
Zerotorescue@62
|
399 if silver > 0 then
|
Zerotorescue@62
|
400 text = silverText:format(text, silver);
|
Zerotorescue@62
|
401 end
|
Zerotorescue@62
|
402
|
Zerotorescue@62
|
403 if not clean or (not gold or gold < 1) then
|
Zerotorescue@62
|
404 local copper = floor( copper % COPPER_PER_SILVER );
|
Zerotorescue@62
|
405 if copper > 0 or text == "" then
|
Zerotorescue@62
|
406 text = copperText:format(text, copper);
|
Zerotorescue@62
|
407 end
|
Zerotorescue@62
|
408 end
|
Zerotorescue@62
|
409 end
|
Zerotorescue@62
|
410
|
Zerotorescue@62
|
411
|
Zerotorescue@62
|
412 return string.trim(text);
|
Zerotorescue@62
|
413 end
|
Zerotorescue@62
|
414
|
Zerotorescue@62
|
415 function addon:ReadableMoneyToCopper(value)
|
Zerotorescue@62
|
416 -- If a player enters a value it will be filled without color codes
|
Zerotorescue@62
|
417 -- If it is retrieved from the database, it will be colored coded
|
Zerotorescue@62
|
418 -- Thus we look for both
|
Zerotorescue@62
|
419 local gold = tonumber(string.match(value, "(%d+)|c[a-fA-F0-9]+g|r") or string.match(value, "(%d+)g"));
|
Zerotorescue@62
|
420 local silver = tonumber(string.match(value, "(%d+)|c[a-fA-F0-9]+s|r") or string.match(value, "(%d+)s"));
|
Zerotorescue@62
|
421 local copper = tonumber(string.match(value, "(%d+)|c[a-fA-F0-9]+c|r") or string.match(value, "(%d+)c"));
|
Zerotorescue@62
|
422
|
Zerotorescue@62
|
423 return ( (gold or 0) * COPPER_PER_GOLD ) + ( (silver or 0) * COPPER_PER_SILVER ) + (copper or 0);
|
Zerotorescue@62
|
424 end
|
Zerotorescue@62
|
425
|
Zerotorescue@62
|
426 function addon:ValidateReadableMoney(info, value)
|
Zerotorescue@62
|
427 -- If a player enters a value it will be filled without color codes
|
Zerotorescue@62
|
428 -- If it is retrieved from the database, it will be colored coded
|
Zerotorescue@62
|
429 -- Thus we look for both
|
Zerotorescue@62
|
430 local gold = tonumber(string.match(value, "(%d+)|c[a-fA-F0-9]+g|r") or string.match(value, "(%d+)g"));
|
Zerotorescue@62
|
431 local silver = tonumber(string.match(value, "(%d+)|c[a-fA-F0-9]+s|r") or string.match(value, "(%d+)s"));
|
Zerotorescue@62
|
432 local copper = tonumber(string.match(value, "(%d+)|c[a-fA-F0-9]+c|r") or string.match(value, "(%d+)c"));
|
Zerotorescue@62
|
433
|
Zerotorescue@62
|
434 if not gold and not silver and not copper then
|
Zerotorescue@62
|
435 return "The provided amount of money is invalid. Please provide the amount of money as #g#s#c, e.g. 591617g24s43c.";
|
Zerotorescue@62
|
436 else
|
Zerotorescue@62
|
437 return true;
|
Zerotorescue@62
|
438 end
|
Zerotorescue@62
|
439 end
|
Zerotorescue@62
|
440
|
Zerotorescue@0
|
441
|
Zerotorescue@0
|
442
|
Zerotorescue@65
|
443
|
Zerotorescue@65
|
444
|
Zerotorescue@13
|
445 -- Public
|
Zerotorescue@13
|
446
|
Zerotorescue@36
|
447 function IMRegisterPricingAddon(name, get, enabled, onSelect)
|
Zerotorescue@13
|
448 addon.supportedAddons.auctionPricing[name] = {
|
Zerotorescue@13
|
449 GetValue = get,
|
Zerotorescue@13
|
450 IsEnabled = enabled,
|
Zerotorescue@36
|
451 OnSelect = onSelect,
|
Zerotorescue@13
|
452 };
|
Zerotorescue@13
|
453 end
|
Zerotorescue@13
|
454
|
Zerotorescue@50
|
455 function IMRegisterItemCountAddon(name, getTotal, getCharacter, enabled, onSelect)
|
Zerotorescue@13
|
456 addon.supportedAddons.itemCount[name] = {
|
Zerotorescue@17
|
457 GetTotalCount = getTotal,
|
Zerotorescue@17
|
458 GetCharacterCount = getCharacter,
|
Zerotorescue@13
|
459 IsEnabled = enabled,
|
Zerotorescue@50
|
460 OnSelect = onSelect,
|
Zerotorescue@13
|
461 };
|
Zerotorescue@13
|
462 end
|
Zerotorescue@13
|
463
|
Zerotorescue@50
|
464 function IMRegisterCraftingAddon(name, queue, enabled, onSelect)
|
Zerotorescue@13
|
465 addon.supportedAddons.crafting[name] = {
|
Zerotorescue@13
|
466 Queue = queue,
|
Zerotorescue@13
|
467 IsEnabled = enabled,
|
Zerotorescue@50
|
468 OnSelect = onSelect,
|
Zerotorescue@13
|
469 };
|
Zerotorescue@13
|
470 end
|
Zerotorescue@13
|
471
|
Zerotorescue@62
|
472 -- We need a global command handler for our chat-links
|
Zerotorescue@62
|
473 function InventoriumCommandHandler(msg)
|
Zerotorescue@62
|
474 addon:CommandHandler(msg);
|
Zerotorescue@62
|
475 end
|
Zerotorescue@62
|
476
|
Zerotorescue@13
|
477
|
Zerotorescue@13
|
478
|
Zerotorescue@65
|
479
|
Zerotorescue@65
|
480
|
Zerotorescue@13
|
481 -- Debug
|
Zerotorescue@0
|
482
|
Zerotorescue@0
|
483 function addon:Debug(t)
|
Zerotorescue@0
|
484 if not self.debugChannel and self.debugChannel ~= false then
|
Zerotorescue@0
|
485 -- 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
|
486 self.debugChannel = false;
|
Zerotorescue@0
|
487
|
Zerotorescue@0
|
488 for i = 1, NUM_CHAT_WINDOWS do
|
Zerotorescue@0
|
489 local name = GetChatWindowInfo(i);
|
Zerotorescue@0
|
490
|
Zerotorescue@0
|
491 if name:upper() == "DEBUG" then
|
Zerotorescue@0
|
492 self.debugChannel = _G["ChatFrame" .. i];
|
Zerotorescue@0
|
493 end
|
Zerotorescue@0
|
494 end
|
Zerotorescue@0
|
495 end
|
Zerotorescue@0
|
496
|
Zerotorescue@0
|
497 if self.debugChannel then
|
Zerotorescue@0
|
498 self.debugChannel:AddMessage(t);
|
Zerotorescue@0
|
499 end
|
Zerotorescue@0
|
500 end
|