- Author: Gnomezilla on Warmane-Icecrown [https://github.com/Bananaman].
## Total Time Elapsed Shown After "Full Scan" and "Group Scan" Completion
The "Full Scan" and "Group Scan" features now display the "total time elapsed" in the status bar after completion, such as "Done Scanning (1:35:27)".
This helps players get a better feel for how long each scan takes, and gives people something nice to look at after each scan.
## Improved Formatting of the "Full Scan" Time Estimate
We now display the time as `elapsed time / ~estimated total time`, such as `0:15:37 / ~1:41:27`.
The total time estimate is continuously updated during the scan, based on our intelligent, weighted "seconds per page" metric and the total number of pages (which can dynamically change during a scan, when other people post or buy auctions). This "total time estimate" therefore follows the server performance beautifully and is very accurate yet responsive to server performance changes.
It's easier to understand than our previous display of "estimated time remaining", since the server might rapidly send you 10 pages in just a few seconds (which then counted down the "estimated time remaining" very quickly), before suddenly stalling for 30 seconds without any progress. It was still exactly as accurate as the new display method, but the new method is nicer to look at and easier to understand.
---
# v2.8.3.667
TradeSkillMaster: Revived
- Release Date: March 20th, 2023
- Author: Gnomezilla on Warmane-Icecrown [https://github.com/Bananaman].
## AuctionDB's "GetAll" Scans Can Now Be Disabled
You can now completely disable "GetAll" scans via the AuctionDB settings. This is useful if your server doesn't return all auctions in its "GetAll" results, which means that you'll get incorrect market value calculations for all items. If you're playing on such servers, it's best to disable the "GetAll" feature to avoid accidentally polluting your price database with incorrect data.
Go into TSM's main options, and then the "AuctionDB" section at the top. Click on the "Options" tab, and use the "Disable GetAll Auction Scans" checkbox. Disabling the "GetAll" feature will also hide its button from the auction scanning GUI.
This protection feature is disabled by default, since most casual players probably won't care that "GetAll" generates incorrect market values. However, it's an incredibly good feature for professional gold makers, who want to avoid all risks of calculating incorrect item prices.
Regardless of whether you use this feature or not, the AuctionDB scan GUI has also been cleaned up now, with much cleaner and more uniform spacing between the various scan buttons.
---
# v2.8.3.666
TradeSkillMaster: Revived
- Release Date: March 19th, 2023
- Author: Gnomezilla on Warmane-Icecrown [https://github.com/Bananaman].
## The Market Value Algorithm Actually Works Now
The new market value algorithm now actually calculates the market value.
Yes, seriously. For some reason, the previous algorithm author didn't think about sorting the auction scan data by "buyout price" before parsing it, which meant that all previous TSM calculations were completely incorrect. All previous versions of TSM generate absolutely batshit insane market prices, such as "1 Wool = 500 Gold", simply because the old algorithm was completely broken.
Therefore, TSM's core feature, the "dbmarket" value which is used in its automatic pricing algorithms, was completely broken and useless.
It has now been fixed. All market value calculations are now correct.
In fact, all of your old AuctionDB databases should be wiped and restarted from zero data with this new patch, so that you get rid of all old, corrupt market price data.
Rewritten, cleaned up and much faster auction scanning algorithm, which uses almost zero memory and NEVER causes any memory overflow crashes, unlike the old algorithm.
This new algorithm is 1.3x-27.3x faster depending on input data size, and on average 5x faster for most data. It uses less than 5% of the memory of the old algorithm. :)
If you want to see for yourself that the new algorithm is working correctly, you simply have to set `verifyNewAlgorithm = true` at the top of `TradeSkillMaster_AuctionDB/Modules/Scanning.lua`, and then run a "GetAll" scan to quickly fetch a huge amount of auctions. It will then process all of the data via both the old and new algorithms, and will display the speed improvements of the new algorithm. If there are any differences at all between the calculations of the two algorithms, it would tell you about that via an "error" message. But the algorithms behave completely identically, so you don't have to worry about that and won't see any errors. This verification feature was simply added because the algorithm rewrite is a massive change, and I am sure that some people will want to verify the complex new algorithm with their own eyes.
## Fixed Database Decoding Crash
Fixed a database decoding bug which caused TSM to crash anytime you attempted to decode data for a "corrupted" item in the database.
This bug usually manifested itself as people failing to perform auction house scans, since every "Full Scan" and "GetAll Scan" (but not "Group Scan") ends by decoding EVERY existing item in your current database (to reset their last-seen, cheapest "minBuyout" value to nil before processing the new data). This meant that the decode failures were usually triggered when people reached the end of their auction scans (but would also happen any other time when something attempts to decode data for that item, such as attempting to view the price-info tooltip of an item that has corrupt data in your database).
The cause of the random database corruption is pretty much impossible to find, but it's extremely rare (and it might even have been caused by people re-using databases from older versions of TSM). The fix simply ignores the corrupt "market day / scan" data for items that cannot be correctly decoded, thus purging those corrupt "days / scans" from the database automatically, while still rescuing their remaining non-corrupt data.
## Added Support for SharedMedia and Custom GUI Fonts
For some insane reason, TradeSkillMaster uses "Arial" as its default font, which is one of the ugliest fonts in the Universe.
Therefore, I've implemented LibSharedMedia support in TSM, which means that you now have access to a huge variety of fonts. By default, TSM will only list the game's own fonts, but you can install the [SharedMedia](https://github.com/bkader/SharedMedia#install) addon for WOTLK to add over 100 extra fonts that are now usable in TSM! Other addons you've installed may also be adding extra fonts to the LibSharedMedia collection!
To change TSM's font, simply type "/tsm", then go into the main tab, and then "Options". Scroll down to the bottom, until you see the new "Normal Font" and "Header Font" options. Have fun!
Note: TSM is unable to use SharedMedia fonts that are registered by addons that load AFTER TSM, since TSM accesses the fonts and creates its own GUI immediately when it loads, even before the user opens TSM's GUI. To use fonts from such an addon, you have to add that addon to "OptionalDeps" in "TradeSkillMaster.toc", which tells the game that you want TSM to load AFTER the addon that provides your extra fonts. This step isn't necessary for SharedMedia fonts, since they're already marked as an optional TSM dependency now.
## Made the "Group Scan" (AuctionDB) Progress Bar More Logical
It made absolutely zero sense, and was inconsistent with the behavior of other "counting" progress labels in TSM. There were two issues with it: The item scanner counted from 0, so item 0 was actually item 1, and item 1 was actually item 2, etc. The other issue is that it always said "Page 1 / 1" while requesting the first page, which was a very confusing and misleading display.
Both issues have now been fixed, and the exact same scan would now look as follows: "Preparing Filter 1 / 2", "Preparing Filter 2 / 2", "Scanning 1 / 2 (Page 1 / ?)", "Scanning 1 / 2 (Page 2 / 16)", ... "Scanning 1 / 2 (Page 16 / 16)", "Scanning 2 / 2 (Page 1 / ?)", "Scanning 2 / 2 (Page 2 / 6)", ... "Scanning 2 / 2 (Page 6 / 6)", "Done Scanning".
In other words, we now properly count the items we're processing, and we display a temporary question mark while we're fetching page 1 (while we don't know how many other pages exist), which then changes into the actual page count as the scan proceeds.
## Made the "Auctioning" Module's Progress Bar More Logical
This is similar to the "Group Scan" issues described above.
The "Auctioning" module's features (Post Scan / Cancel Scan / Reset Scan) had several issues.
They were counting items from 0, so the progres bar said "Scanning 0 / 2" for the first item, and "Scanning 1 / 2" for the final item. That has now been fixed and now counts properly (as "1/2" and "2/2").
They also had a completely broken page counter, which didn't properly reset between items, which meant that you'd see complete nonsense while scanning, such as "Scanning 3 / 5 (Page 5 / 5)" followed by "Scanning 4 / 5 (Page 5 / 5)" (keeping the previous page counter), and then the proper counter would finally show up as "Scanning 4 / 5 (Page 1 / 12)" after a few seconds (whenever the server finally replied to the query). It was broken and confusing as hell. That's now been fixed too, so that it properly resets the page counter before every new item it's scanning.
Furthermore, the confusing "Page 1 / 1 ... Page 2 / 18" issue has been fixed here too, and now says "Page 1 / ?" while fetching the first page of each item.
Lastly, their page counter was inconsistent with the behavior of regular "AuctionDB: Group Scan" and the "Shopping" progress bars. The page counter in "Auctioning" was zero-indexed, meaning that "Scanning Page 1/8" meant that you were actually scanning page 2/8. That math has now been fixed here, for consistency with the AuctionDB and Shopping scanner's math, because that's a much more logical way to display the pages.
## Made the "Shopping" Module's Progress Bar More Logical
The "Shopping" module's scanner had multiple issues.
The bar background was supposed to gradually "fill in" to indicate progress for both the "current/total item progress" and the "page progress of the current item". But the math was completely broken. It rendered the progress bar incorrectly, since it ended up counting the progress as "2 items below the item it's currently working on" (due to a mistaken "-1" in the old math). As a result, if you were currently scanning item 3 of 3, you SHOULD have seen a 66% full bar (since 2 of 3 items are done, and the 3rd is being worked on). But you instead only saw a 33% full bar, which was completely wrong. This was especially noticeable if you performed a multi-item search, such as "copper ore; copper bar; gold ore; gold bar".
They were also counting items from 0, so the progress bar said "Scanning 0 / 2" for the first item, and "Scanning 1 / 2" for the final item. That has now been fixed and now counts properly (as "1/2" and "2/2"), just like with the other modules above.
Lastly, the confusing "Page 1 / 1 ... Page 2 / 18" issue has been fixed here too, and now says "Page 1 / ?" while fetching the first page of each item.
## Accurate Time Estimate for the "Full Scan" Progress Bar
Implemented an accurate "time remaining" estimate for the "Full Scan" algorithm. The progress bar now shows how much time remains until the scan is complete, such as `Scanning page 293/2399 (~1:04:34)`, meaning that roughly one hour remains. This is very useful for people who want to use the comprehensive "Full Scan" scanning method, but who hate the feeling of blindly scanning without being able to see the remaining time.
The first time you run a scan on a server, you'll have a very unpredictable estimate, since we use a learning algorithm. The estimate is based on how fast the server is feeding us the "auction pages" on average, which is impossible to know on the first run. Most servers will gradually throttle the player's requests and use random load throttling, so you'll see a growing estimate until it finally settles on an accurate estimate after around 80% of the pages have been received. The slowdown curve depends on the server's throttling implementation, and cannot be predicted ahead of time.
Think of the first run as the "learning run". After you've completed a "Full Scan", our algorithm learns from it and will produce excellent estimates for all future scans, using a blending algorithm which takes into account both the active run's speed and previous speeds, to predict the server's behavior. The statistics are stored per-server and per-faction, so if you're playing both Alliance and Horde, you'll have to do one full scan per faction to teach it about both factions.
Note regarding the other scan types: The "GetAll Scan" algorithm only takes a few seconds, so it doesn't need any time estimate. And the "Group Scan" algorithm can't implement any estimate, since there's no way to know how many "auction pages" the remaining items in the group will have.
## Improved "GetAll" Algorithm Reliability
Most private servers don't implement WoW's "can we perform a GetAll Query?" API, and incorrectly answer that the user is allowed to run a query, even though you may still be throttled after a recent "GetAll" scan. Therefore, TSM's own "don't start a GetAll if we're on cooldown" check doesn't work on private servers. The user may therefore click on "Run GetAll Scan" and will then just blindly sit there like an idiot while the request has actually been secretly ignored by the server.
This situation has now been fixed, so that the "GetAll" scan UI tells the user when the server has silently throttled / ignored their "GetAll" request, so they don't sit there and wait for hours without any progress. Basically, if it's taken longer than 30 seconds, we're assuming that the request has been silently ignored by the server, and will now tell the user via the TSM GUI's progress bar message. It first says `Running query...` as usual, which then changes to `Running query... Server not responding due to throttling? Try again later...` if there hasn't been a server response in more than 30 seconds.
The "GetAll" algorithm has also been improved to automatically detect when your server is only sending limited / truncated data. Extremely large private servers such as Warmane simply have too many auctions, and their "GetAll" scan won't retrieve all of them. We now warn the user via a chat-message whenever we detect truncated auction data, and we then tell them to use "Full Scan" instead.
It's unfortunately impossible to calculate accurate market values if your server is sending truncated "GetAll" responses, but people may still prefer the speed of the "GetAll" scans, so we're therefore still allowing their "truncated" auction data to be processed. The users will have to read the warning message and decide for themselves which scans they want to use.
The inaccuracy of an incomplete "GetAll" scan completely depends on how the server implements "GetAll". If the server sorts the cheapest auctions first, then it's somewhat acceptable for popular items which have many stacks (and are therefore likely to contain enough data points in the "GetAll" result), and those items will "just" tend to be undervalued by 2-10% less than their real market value (since their percentile-based scans will look at less auctions than the real amount). But for very rare or unpopular items, the partial "GetAll" scan is very dangerous, since you might only receive the massively overpriced auctions of a certain item, and thereby calculate an insanely high market value for it. These dangers are increased if the server sends the auctions in a totally random order, which means an even greater risk of market price pollution by only seeing overpriced auctions for many of the items.
Furthermore, receiving incomplete "GetAll" results means that TSM will wipe all of its "cheapest, current buyout price" data for all items, and then fills them with incorrect data (or nothing at all if an item wasn't seen in the latest fetch), thus hindering your ability to look up the correct "best current buyout prices" too.
In summary, you'll have to use partial "GetAll" results at your own risk! A "Full Scan" is ALWAYS much better when your server's "GetAll" doesn't provide all auction data!
## Improved All Auction Data and Market Value Processing
There were several bugs everywhere in the old code. For example, only the "GetAll" scan had correctly implemented filtering of non-buyout items (auctions that ONLY have a bid price, without any buyout price), which meant that TSM's other scan methods ("Full Scan", "Group Scan", etc) were injecting invalid data into the player's database, such as items with empty "buyout prices". They were being treated as items with a buyout price of ZERO (as if they were totally free items, at no cost!). This serious bug happened every time when there were ANY bid-based auctions for an item in the latest scan.
All of the auction scanning and processing algorithms have been rewritten for correctness, and will now filter out those useless "bid-only" data entries. We will only analyze auctions that have buyout prices.
Several bugs have also been fixed related to items being incorrectly marked as "seen and scanned now" even when there was no new data for that item in the latest data batch (this was yet again related to the "incoming data only has bid-based auctions" bug). We now only update the scan-statistics for items when we encounter new data for them with valid buyout prices.
There were also bugs in the market value calculation algorithm, which would crash with "division by zero" if given empty input data (yet again related to only having bid-based auctions in the input data, but this crash only happened if there were only bid-based auctions for an item, without any buyout-based auctions whatsoever for that item, so it was rare to encounter this crash). That issue has also been fixed now, by adding perfect protection against empty inputs in the market value calculation algorithm.
We also no longer update the market value for an item if we were unable to calculate a new market value (the old code simply wrote invalid market values to the database without any sanity checks).
All of these improvements mean that TSM's market price estimates are now infinitely more reliable than old TSM versions.
## Fixed Missing "Interruption" Events in Auction Scanners
This is a great example of what a total mess the TSM codebase is...
All auction scanners (AuctionDB, Auctioning and Shopping) were missing their "scan interrupted" event, which is triggered when the Auction House frame closes while a scan is ongoing.
The problem was caused by the fact that TSM previously used the "LibAuctionScan-1.0" library, which emits the "SCAN_INTERRUPTED" event. All TSM scanners were still written to react to that old event name. But TSM nowadays uses their own scanning library instead, which sends the "INTERRUPTED" event instead. They literally forgot to update the event handlers when they switched the library, and they didn't even bother deleting the old library either.
All three scanning methods have now been fixed, to react to the proper "INTERRUPTED" event, to be able to detect when your scans are interrupted by the auction window being closed.
Furthermore, the "Shopping" module hadn't implemented interruption handling whatsoever. There literally wasn't any event handler for it. It has now been properly implemented, so that the "Shopping" scanner works properly and correctly resets itself after interruptions.
## IMPORTANT!
When upgrading to this improved version, it's an extremely good idea to delete your old-school, CORRUPT auction database, since your old data has been generated by the extremely buggy algorithms of the old TSM. For example, some of those old "auction data corrupting" bugs include the fact that it was calculating completely incorrect market values when doing "GetAll" scans, since it was previously unable to handle per-item prices inside item stacks, and another bug is the fact that all other scan methods generated wrong market values too, thanks to TSM's previously completely broken market value algorithm (those problems are described in the other changelog entries above).
There is NO GOOD REASON to keep your old auction database. It's all corrupt thanks to all the old TSM bugs, 100% guaranteed. You need to start fresh.
If you're ready to start fresh, simply delete these files (where `YOUR_ACCOUNT_NAME` is your own account name):
text=TSMAPI.Design:ColorText(L["Wrath of the Lich King Revival:"],"link").." Gnomezilla [Warmane-Icecrown(A)], BlueAo [Warmane], andrew6180, Yoshiyuka, DimaSheiko, and other contributors...",
relativeWidth=1,
},
},
},
},
@ -224,12 +230,23 @@ end
localfunctionDecodeAppearanceData(encodedData)
ifnotencodedDatathenreturnend
encodedData=gsub(encodedData,"","")
-- Decode the appearance-data string into a table.
text=format(L["More advanced options are now designated by %sred text|r. Beginners are encourages to come back to these once they have a solid understanding of the basics."],TSMAPI.Design:GetInlineColor("advanced")),
text=format(L["More advanced options are now designated by %sred text|r. Beginners are encouraged to come back to these once they have a solid understanding of the basics."],TSMAPI.Design:GetInlineColor("advanced")),
button1=OKAY,
OnAccept=function()
TSM:Printf(L["More advanced options are now designated by %sred text|r. Beginners are encourages to come back to these once they have a solid understanding of the basics."],TSMAPI.Design:GetInlineColor("advanced"))
TSM:Printf(L["More advanced options are now designated by %sred text|r. Beginners are encouraged to come back to these once they have a solid understanding of the basics."],TSMAPI.Design:GetInlineColor("advanced"))
-- L["More advanced options are now designated by %sred text|r. Beginners are encourages to come back to these once they have a solid understanding of the basics."] = ""
-- L["More advanced options are now designated by %sred text|r. Beginners are encouraged to come back to these once they have a solid understanding of the basics."] = ""
L["Move Already Grouped Items"]="Verschiebe bereits gruppierte Gegenstände"
L["Here you can setup relationships between the settings of this operation and other operations for this module. For example, if you have a relationship set to OperationA for the stack size setting below, this operation's stack size setting will always be equal to OperationA's stack size setting."]=true
L["More advanced options are now designated by %sred text|r. Beginners are encourages to come back to these once they have a solid understanding of the basics."]=true
L["More advanced options are now designated by %sred text|r. Beginners are encouraged to come back to these once they have a solid understanding of the basics."]=true
L["Move Already Grouped Items"]=true
L["Move Group"]=true
L["Move to Top Level"]=true
@ -351,6 +353,7 @@ L["New Subgroup Name"] = true
L["New"]=true
L["No Assistant guides available for the modules which you have installed."]=true
L["None of your groups have %s operations assigned. Type '/tsm' and click on the 'TradeSkillMaster Groups' button to assign operations to your TSM groups."]=true
L["Normal Font (Requires Reload)"]=true
L["Normal Text Size (Requires Reload)"]=true
L["Now that the scan is finished, you can look through the results shown in the log, and for each item, decide what action you want to take.\n\nOnce you're done, click on the button below."]=true
L["Number of Auction Result Rows (Requires Reload)"]=true
@ -580,10 +583,10 @@ L["We will add items to this group through its 'Items' tab. Click on that tab no
L["We will import items into this group using the import list you have."]=true
L["Web Master:"]=true
L["What do you want to do?"]=true
L["What do you want to do?"]=true
L["When checked, random enchants will be ignored for ungrouped items.\n\nNB: This will not affect parent group items that were already added with random enchants\n\nIf you have this checked when adding an ungrouped randomly enchanted item, it will act as all possible random enchants of that item."]=true
L["When clicked, makes this group a top-level group with no parent."]=true
L["Would you like to add this new operation to %s?"]=true
L["Wrath of the Lich King Revival:"]=true
L["Wrong number of item links."]=true
L["You appear to be attempting to import an operation from a different module."]=true
L["You can change the active database profile, so you can have different settings for every character."]=true
-- L["More advanced options are now designated by %sred text|r. Beginners are encourages to come back to these once they have a solid understanding of the basics."] = ""
-- L["More advanced options are now designated by %sred text|r. Beginners are encouraged to come back to these once they have a solid understanding of the basics."] = ""
L["Move Already Grouped Items"]="Mover los objetos ya en grupo"
@ -315,7 +315,7 @@ Once you're done, click the button below.]=] ] = "" ]==]
-- L["Module Operations / Options"] = ""
-- L["Modules"] = ""
-- L["More Advanced Methods"] = ""
-- L["More advanced options are now designated by %sred text|r. Beginners are encourages to come back to these once they have a solid understanding of the basics."] = ""
-- L["More advanced options are now designated by %sred text|r. Beginners are encouraged to come back to these once they have a solid understanding of the basics."] = ""
@ -315,7 +315,7 @@ L["Module Information:"] = "Informations sur le module:" -- Needs review
L["Module Operations / Options"]="Opérations / Options du module"-- Needs review
-- L["Modules"] = ""
L["More Advanced Methods"]="Méthodes plus avancées"-- Needs review
-- L["More advanced options are now designated by %sred text|r. Beginners are encourages to come back to these once they have a solid understanding of the basics."] = ""
-- L["More advanced options are now designated by %sred text|r. Beginners are encouraged to come back to these once they have a solid understanding of the basics."] = ""
-- L["Move Already Grouped Items"] = ""
-- L["Moved %s to %s."] = ""
L["Move Group"]="Déplacer le groupe"-- Needs review
L["Module Operations / Options"]="모듈 작업 / 옵션"-- Needs review
-- L["Modules"] = ""
L["More Advanced Methods"]="좀더 고급 방식"-- Needs review
-- L["More advanced options are now designated by %sred text|r. Beginners are encourages to come back to these once they have a solid understanding of the basics."] = ""
-- L["More advanced options are now designated by %sred text|r. Beginners are encouraged to come back to these once they have a solid understanding of the basics."] = ""
L["Module Operations / Options"]="Módulo de operações/opções"-- Needs review
-- L["Modules"] = ""
L["More Advanced Methods"]="Métodos mais avançados"
-- L["More advanced options are now designated by %sred text|r. Beginners are encourages to come back to these once they have a solid understanding of the basics."] = ""
-- L["More advanced options are now designated by %sred text|r. Beginners are encouraged to come back to these once they have a solid understanding of the basics."] = ""
L["Move Already Grouped Items"]="Mover itens já agrupados"
-- L["More advanced options are now designated by %sred text|r. Beginners are encourages to come back to these once they have a solid understanding of the basics."] = ""
-- L["More advanced options are now designated by %sred text|r. Beginners are encouraged to come back to these once they have a solid understanding of the basics."] = ""
L["Move Already Grouped Items"]="Перемещать уже Группированные предметы"
L["More advanced options are now designated by %sred text|r. Beginners are encourages to come back to these once they have a solid understanding of the basics."]="更多高级选项指定%sred文本|r。不建议初学者使用。"
L["More advanced options are now designated by %sred text|r. Beginners are encouraged to come back to these once they have a solid understanding of the basics."]="更多高级选项指定%sred文本|r。不建议初学者使用。"
-- L["More advanced options are now designated by %sred text|r. Beginners are encourages to come back to these once they have a solid understanding of the basics."] = ""
-- L["More advanced options are now designated by %sred text|r. Beginners are encouraged to come back to these once they have a solid understanding of the basics."] = ""
@ -14,7 +14,7 @@ local L = LibStub("AceLocale-3.0"):NewLocale("TradeSkillMaster_AuctionDB", "deDE
ifnotLthenreturnend
L["A full auction house scan will scan every item on the auction house but is far slower than a GetAll scan. Expect this scan to take several minutes or longer."]="Ein voller Auktionshausscan wird jedes einzelne Item im Auktionshaus scannen, ist aber sehr viel langsamer als der GetAll-Scan. Erwarte, dass es mehrere Minuten dauert oder länger."
L["A GetAll scan is the fastest in-game method for scanning every item on the auction house. However, there are many possible bugs on Blizzard's end with it including the chance for it to disconnect you from the game. Also, it has a 15 minute cooldown."]="Ein GetAll-Scan ist die schnellste Methode, um in-game alle Gegenstände im Auktionshaus zu scannen. Allerdings gibt es viele mögliche Bugs seitens Blizzard die auftreten können, inklusive der Möglichkeit, dass deine Verbindung zum Spiel getrennt wird. Außerdem gibt es einen 15-Minuten-Cooldown."
L["A GetAll scan is the fastest in-game method for scanning every item on the auction house. However, there are many possible bugs on Blizzard's end with it including the chance for it to disconnect you from the game. Also, it has a 15 minute cooldown. You can disable the GetAll button via TSM's AuctionDB options if this feature doesn't work well on your server."]="Ein GetAll-Scan ist die schnellste Methode, um in-game alle Gegenstände im Auktionshaus zu scannen. Allerdings gibt es viele mögliche Bugs seitens Blizzard die auftreten können, inklusive der Möglichkeit, dass deine Verbindung zum Spiel getrennt wird. Außerdem gibt es einen 15-Minuten-Cooldown. You can disable the GetAll button via TSM's AuctionDB options if this feature doesn't work well on your server."-- Needs review
L["Any items in the AuctionDB database that contain the search phrase in their names will be displayed."]="Es werden alle Gegenstände in der \"AuctionDB\" Datenbank angezeigt, deren Namen mit der Sucheingabe übereinstimmen."
L["Are you sure you want to clear your AuctionDB data?"]="Sind Sie sicher, dass Sie die \"AuctionDB\" Daten löschen wollen?"
@ -14,7 +14,7 @@ local L = LibStub("AceLocale-3.0"):NewLocale("TradeSkillMaster_AuctionDB", "enUS
ifnotLthenreturnend
L["%s ago"]=true
L["A GetAll scan is the fastest in-game method for scanning every item on the auction house. However, there are many possible bugs on Blizzard's end with it including the chance for it to disconnect you from the game. Also, it has a 15 minute cooldown."]=true
L["A GetAll scan is the fastest in-game method for scanning every item on the auction house. However, there are many possible bugs on Blizzard's end with it including the chance for it to disconnect you from the game. Also, it has a 15 minute cooldown. You can disable the GetAll button via TSM's AuctionDB options if this feature doesn't work well on your server."]=true
L["A full auction house scan will scan every item on the auction house but is far slower than a GetAll scan. Expect this scan to take several minutes or longer."]=true
L["Any items in the AuctionDB database that contain the search phrase in their names will be displayed."]=true
L["Are you sure you want to clear your AuctionDB data?"]=true
L["Display lowest buyout value seen in the last scan in tooltip."]=true
L["Display market value in tooltip."]=true
L["Done Scanning"]=true
@ -31,6 +32,7 @@ L["Enable display of AuctionDB data in tooltip."] = true
L["GetAll scan did not run successfully due to issues on Blizzard's end. Using the TSM application for your scans is recommended."]=true
L["Hide poor quality items"]=true
L["If checked, AuctionDB will add a tab to the AH to allow for in-game scans. If you are using the TSM app exclusively for your scans, you may want to hide it by unchecking this option. This option requires a reload to take effect."]=true
L["If checked, AuctionDB will not perform \"GetAll\" scans. This is useful if your server doesn't return all auctions in its \"GetAll\" results, which means that you'll get incorrect market value calculations for all items. If you're playing on such servers, it's best to disable the \"GetAll\" feature to avoid accidentally polluting your price database with incorrect data. This option takes effect immediately, but requires a reload to completely hide the \"Run GetAll Scan\" button."]=true
L["If checked, poor quality items won't be shown in the search results."]=true
L["If checked, the lowest buyout value seen in the last scan of the item will be displayed."]=true
L["If checked, the market value of the item will be displayed"]=true
@ -72,7 +74,9 @@ L["Result Order:"] = true
L["Run Full Scan"]=true
L["Run GetAll Scan"]=true
L["Running query..."]=true
L["Running query... Server not responding due to throttling? Try again later..."]=true
L["Scan Selected Groups"]=true
L["Scanning %d / %d (Page 1 / ?)"]=true
L["Scanning %d / %d (Page %d / %d)"]=true
L["Scanning page %s/%s"]=true
L["Scanning the auction house in game is no longer necessary!"]=true
@ -89,3 +93,4 @@ L["Use the search box and category filters above to search the AuctionDB data."]
L["You can filter the results by item subtype by using this dropdown. For example, if you want to search for all herbs, you would select \"Trade Goods\" in the item type dropdown and \"Herbs\" in this dropdown."]=true
L["You can filter the results by item type by using this dropdown. For example, if you want to search for all herbs, you would select \"Trade Goods\" in this dropdown and \"Herbs\" as the subtype filter."]=true
L["You can use this page to lookup an item or group of items in the AuctionDB database. Note that this does not perform a live search of the AH."]=true
L["You have disabled GetAll scans via AuctionDB's options."]=true
@ -14,7 +14,7 @@ local L = LibStub("AceLocale-3.0"):NewLocale("TradeSkillMaster_AuctionDB", "esES
ifnotLthenreturnend
-- L["A full auction house scan will scan every item on the auction house but is far slower than a GetAll scan. Expect this scan to take several minutes or longer."] = ""
-- L["A GetAll scan is the fastest in-game method for scanning every item on the auction house. However, there are many possible bugs on Blizzard's end with it including the chance for it to disconnect you from the game. Also, it has a 15 minute cooldown."] = ""
-- L["A GetAll scan is the fastest in-game method for scanning every item on the auction house. However, there are many possible bugs on Blizzard's end with it including the chance for it to disconnect you from the game. Also, it has a 15 minute cooldown. You can disable the GetAll button via TSM's AuctionDB options if this feature doesn't work well on your server."] = ""
L["Any items in the AuctionDB database that contain the search phrase in their names will be displayed."]="Todos los artículos en la base de datos de AuctionDB que contienen la frase de búsqueda en su nombre en la pantalla."
L["Are you sure you want to clear your AuctionDB data?"]="¿Está seguro que desea borrar los datos AuctionDB?"
@ -14,7 +14,7 @@ local L = LibStub("AceLocale-3.0"):NewLocale("TradeSkillMaster_AuctionDB", "esMX
ifnotLthenreturnend
-- L["A full auction house scan will scan every item on the auction house but is far slower than a GetAll scan. Expect this scan to take several minutes or longer."] = ""
-- L["A GetAll scan is the fastest in-game method for scanning every item on the auction house. However, there are many possible bugs on Blizzard's end with it including the chance for it to disconnect you from the game. Also, it has a 15 minute cooldown."] = ""
-- L["A GetAll scan is the fastest in-game method for scanning every item on the auction house. However, there are many possible bugs on Blizzard's end with it including the chance for it to disconnect you from the game. Also, it has a 15 minute cooldown. You can disable the GetAll button via TSM's AuctionDB options if this feature doesn't work well on your server."] = ""
-- L["Any items in the AuctionDB database that contain the search phrase in their names will be displayed."] = ""
-- L["Are you sure you want to clear your AuctionDB data?"] = ""
@ -14,7 +14,7 @@ local L = LibStub("AceLocale-3.0"):NewLocale("TradeSkillMaster_AuctionDB", "frFR
ifnotLthenreturnend
L["A full auction house scan will scan every item on the auction house but is far slower than a GetAll scan. Expect this scan to take several minutes or longer."]="Une analyse complète de l'Hôtel des ventes examinera tous les objets de l'hôtel des ventes mais est beaucoup plus lente que la méthode du GetAll. Attendez-vous à ce que cette analyse dure de nombreuses minutes."
-- L["A GetAll scan is the fastest in-game method for scanning every item on the auction house. However, there are many possible bugs on Blizzard's end with it including the chance for it to disconnect you from the game. Also, it has a 15 minute cooldown."] = ""
-- L["A GetAll scan is the fastest in-game method for scanning every item on the auction house. However, there are many possible bugs on Blizzard's end with it including the chance for it to disconnect you from the game. Also, it has a 15 minute cooldown. You can disable the GetAll button via TSM's AuctionDB options if this feature doesn't work well on your server."] = ""
L["Any items in the AuctionDB database that contain the search phrase in their names will be displayed."]="Tout objets présent dans la base de donnée d'AuctionDB contenant la phrase recherchée dans son nom sera affiché."
L["Are you sure you want to clear your AuctionDB data?"]="Êtes-vous sûr de vouloir vider les données d'AuctionDB?"
@ -14,7 +14,7 @@ local L = LibStub("AceLocale-3.0"):NewLocale("TradeSkillMaster_AuctionDB", "koKR
ifnotLthenreturnend
L["A full auction house scan will scan every item on the auction house but is far slower than a GetAll scan. Expect this scan to take several minutes or longer."]="전체 검색은 경매장 내의 모든 아이템을 검색하지만 GetAll 검색보다는 훨씬 느립니다. 이 검색은 몇 분 정도 또는 그 이상의 시간이 소요됩니다."
L["A GetAll scan is the fastest in-game method for scanning every item on the auction house. However, there are many possible bugs on Blizzard's end with it including the chance for it to disconnect you from the game. Also, it has a 15 minute cooldown."]="GetAll 검색은 게임 내에서 경매장의 모든 아이템을 검색하기 위한 가장 빠른 검색 방법입니다. 하지만 블리자드 쪽에 많은 버그가 존재하며 게임의 접속이 끊길 가능성도 있습니다. 또한, 15분의 쿨다운이 존재합니다."-- Needs review
L["A GetAll scan is the fastest in-game method for scanning every item on the auction house. However, there are many possible bugs on Blizzard's end with it including the chance for it to disconnect you from the game. Also, it has a 15 minute cooldown. You can disable the GetAll button via TSM's AuctionDB options if this feature doesn't work well on your server."]="GetAll 검색은 게임 내에서 경매장의 모든 아이템을 검색하기 위한 가장 빠른 검색 방법입니다. 하지만 블리자드 쪽에 많은 버그가 존재하며 게임의 접속이 끊길 가능성도 있습니다. 또한, 15분의 쿨다운이 존재합니다. You can disable the GetAll button via TSM's AuctionDB options if this feature doesn't work well on your server."-- Needs review
L["Any items in the AuctionDB database that contain the search phrase in their names will be displayed."]="이름에 검색 구문을 포함하는 AuctionDB 데이터베이스 내의 모든 아이템이 표시됩니다."
L["Are you sure you want to clear your AuctionDB data?"]="모든 AuctionDB 데이터를 삭제 하시겠습니까?"
@ -14,7 +14,7 @@ local L = LibStub("AceLocale-3.0"):NewLocale("TradeSkillMaster_AuctionDB", "ptBR
ifnotLthenreturnend
L["A full auction house scan will scan every item on the auction house but is far slower than a GetAll scan. Expect this scan to take several minutes or longer."]="Um escaneamento completo da casa de leilões irá escanear todos os itens da casa de leilões, porém é bem mais lento que um escaneamento PegaTudo. Espere que este escaneamento demore vários minutos ou mais."
-- L["A GetAll scan is the fastest in-game method for scanning every item on the auction house. However, there are many possible bugs on Blizzard's end with it including the chance for it to disconnect you from the game. Also, it has a 15 minute cooldown."] = ""
-- L["A GetAll scan is the fastest in-game method for scanning every item on the auction house. However, there are many possible bugs on Blizzard's end with it including the chance for it to disconnect you from the game. Also, it has a 15 minute cooldown. You can disable the GetAll button via TSM's AuctionDB options if this feature doesn't work well on your server."] = ""
L["Any items in the AuctionDB database that contain the search phrase in their names will be displayed."]="Qualquer item no bando de dados do AuctionDB que contém a frase procurada em seus nomes serão exibidos."
L["Are you sure you want to clear your AuctionDB data?"]="Você tem certeza de que quer limpar os dados do seu AuctionDB?"
@ -14,7 +14,7 @@ local L = LibStub("AceLocale-3.0"):NewLocale("TradeSkillMaster_AuctionDB", "ruRU
ifnotLthenreturnend
L["A full auction house scan will scan every item on the auction house but is far slower than a GetAll scan. Expect this scan to take several minutes or longer."]="Полный скан Аукциона просканирует каждый товар, но намного дольше, чем GetAll скан. Ждите, это займёт несколько минут или более."
L["A GetAll scan is the fastest in-game method for scanning every item on the auction house. However, there are many possible bugs on Blizzard's end with it including the chance for it to disconnect you from the game. Also, it has a 15 minute cooldown."]="GetAll скан - самый быстрый внутриигровой способ сканирования. Однако, из-за из-за ошибок со стороны Blizzard's, существует вероятность отключения от сервера. Кроме того, он имеет 15-минутный перерыв."
L["A GetAll scan is the fastest in-game method for scanning every item on the auction house. However, there are many possible bugs on Blizzard's end with it including the chance for it to disconnect you from the game. Also, it has a 15 minute cooldown. You can disable the GetAll button via TSM's AuctionDB options if this feature doesn't work well on your server."]="GetAll скан - самый быстрый внутриигровой способ сканирования. Однако, из-за из-за ошибок со стороны Blizzard's, существует вероятность отключения от сервера. Кроме того, он имеет 15-минутный перерыв. You can disable the GetAll button via TSM's AuctionDB options if this feature doesn't work well on your server."-- Needs review
L["Any items in the AuctionDB database that contain the search phrase in their names will be displayed."]="Будут отображены все товары из базы данных AuctionDB, содержащие искомую фразу в названии."
L["Are you sure you want to clear your AuctionDB data?"]="Вы действительно хотите очистить базу AuctionDB?"
@ -14,7 +14,7 @@ local L = LibStub("AceLocale-3.0"):NewLocale("TradeSkillMaster_AuctionDB", "zhCN
ifnotLthenreturnend
L["A full auction house scan will scan every item on the auction house but is far slower than a GetAll scan. Expect this scan to take several minutes or longer."]="完整扫描拍卖行内的所有物品,此方式远慢于快速扫描,预计费时几分钟甚至更久。"
L["A GetAll scan is the fastest in-game method for scanning every item on the auction house. However, there are many possible bugs on Blizzard's end with it including the chance for it to disconnect you from the game. Also, it has a 15 minute cooldown."]="快速扫描时扫描拍卖行中每件物品最快的方式。然而,在服务器端有着可能的BUG会使您掉线,所以每15分钟才能执行一次。"
L["A GetAll scan is the fastest in-game method for scanning every item on the auction house. However, there are many possible bugs on Blizzard's end with it including the chance for it to disconnect you from the game. Also, it has a 15 minute cooldown. You can disable the GetAll button via TSM's AuctionDB options if this feature doesn't work well on your server."]="快速扫描时扫描拍卖行中每件物品最快的方式。然而,在服务器端有着可能的BUG会使您掉线,所以每15分钟才能执行一次。 You can disable the GetAll button via TSM's AuctionDB options if this feature doesn't work well on your server."-- Needs review
L["Any items in the AuctionDB database that contain the search phrase in their names will be displayed."]="任何包含搜索短语的AuctionDB数据库中的物品都将显示。"
L["Are you sure you want to clear your AuctionDB data?"]="您确定要清除AuctionDB数据吗?"
@ -14,7 +14,7 @@ local L = LibStub("AceLocale-3.0"):NewLocale("TradeSkillMaster_AuctionDB", "zhTW
ifnotLthenreturnend
L["A full auction house scan will scan every item on the auction house but is far slower than a GetAll scan. Expect this scan to take several minutes or longer."]="完整的拍賣行掃描會掃描每件在拍賣行的物品但是比GetAll掃描還緩慢。預期掃描會花費幾分鐘或是更久。"
-- L["A GetAll scan is the fastest in-game method for scanning every item on the auction house. However, there are many possible bugs on Blizzard's end with it including the chance for it to disconnect you from the game. Also, it has a 15 minute cooldown."] = ""
-- L["A GetAll scan is the fastest in-game method for scanning every item on the auction house. However, there are many possible bugs on Blizzard's end with it including the chance for it to disconnect you from the game. Also, it has a 15 minute cooldown. You can disable the GetAll button via TSM's AuctionDB options if this feature doesn't work well on your server."] = ""
L["Any items in the AuctionDB database that contain the search phrase in their names will be displayed."]="任何在AuctionDB資料庫中符合搜尋條件的物品,都會顯示出來。"
L["Are you sure you want to clear your AuctionDB data?"]="你確定要清除AuctionDB資料?"
-- NOTE: We hide this button if the player has disabled GetAll scans.
localyOffset=-50
ifincludeGetAllthen
localbtn=TSMAPI.GUI:CreateButton(buttonFrame,18)
btn:SetPoint("TOPLEFT",6,-50)
btn:SetPoint("TOPRIGHT",-6,-50)
btn:SetPoint("TOPLEFT",6,yOffset)
btn:SetPoint("TOPRIGHT",-6,yOffset)
btn:SetHeight(22)
btn:SetScript("OnClick",TSM.Scan.StartGetAllScan)
btn:SetText(L["Run GetAll Scan"])
btn.tooltip=L["A GetAll scan is the fastest in-game method for scanning every item on the auction house. However, there are many possible bugs on Blizzard's end with it including the chance for it to disconnect you from the game. Also, it has a 15 minute cooldown."]
btn.tooltip=L["A GetAll scan is the fastest in-game method for scanning every item on the auction house. However, there are many possible bugs on Blizzard's end with it including the chance for it to disconnect you from the game. Also, it has a 15 minute cooldown. You can disable the GetAll button via TSM's AuctionDB options if this feature doesn't work well on your server."]
frame.startGetAllButton=btn
localtext=TSMAPI.GUI:CreateLabel(buttonFrame)
@ -146,24 +162,33 @@ function private:CreateStartScanContent(parent)
btn.tooltip=L["A full auction house scan will scan every item on the auction house but is far slower than a GetAll scan. Expect this scan to take several minutes or longer."]
-- IMPORTANT: As explained in the "Scan:AUCTION_ITEM_LIST_UPDATE()" code
-- comments, we're allowing GetAll scans even when the server DOESN'T return
-- all auctions. For example, Warmane has chosen to limit GetAll results to
-- only 55k auctions (even though they usually have 120k+ auctions). This
-- means that the market data calculations will be missing data. We should
-- therefore warn the user and tell them to use "Full Scan" instead, when
-- they're playing on such "limited GetAll" servers. But we'll still allow
-- use of "GetAll", with a warning message for people who INSIST on using it,
-- since even when it only looks at half the auctions, it can still give a
-- "pretty decent" idea of market values.
-- NOTE: It WOULD be "best" to always throw away (ignore) incomplete "GetAll"
-- data, but most casual players will prefer to have this feature even if those
-- incomplete scans are much less accurate than a proper "Full Scan".
-- NOTE: The inaccuracy of an incomplete "GetAll" scan completely depends on
-- how the server implements "GetAll". If the server sorts the cheapest
-- auctions first, then it's somewhat acceptable for popular items which
-- have many stacks (and are therefore likely to contain enough data points
-- in the "GetAll" result), and those items will "just" tend to be undervalued
-- by 2-10% less than their real market value (since their percentile-based
-- scans will look at less auctions than the real amount). But for very rare
-- or unpopular items, the partial "GetAll" scan is very dangerous, since
-- you might only receive the massively overpriced auctions of a certain
-- item, and thereby calculate an insanely high market value for it. These
-- dangers are increased if the server sends the auctions in a totally
-- random order, which means an even greater risk of market price pollution
-- by only seeing overpriced auctions for many of the items.
-- NOTE: Furthermore, receiving incomplete "GetAll" results means that TSM
-- will wipe all of its "cheapest, current buyout price" data for all items,
-- and then fills them with incorrect data (or nothing at all if an item
-- wasn't seen in the latest fetch), thus hindering your ability to look up
-- the correct "best current buyout prices" too.
-- NOTE: In summary, you'll have to use partial "GetAll" results at your
-- own risk! A "Full Scan" is ALWAYS much better when your server's "GetAll"
-- doesn't provide all auction data!
localshown,total=GetNumAuctionItems("list")
iftotal~=Scan.getAllLoadedthen-- getAllLoaded = Same as "shown", but cached via our GetAll event.
-- NOTE: Message is not localized, because who the hell is gonna provide
-- translations to this project? It'd be a waste of time to translate it,
-- especially since we dynamically insert a word based on the result.
TSM:Print(format(
"WARNING: Your server has %d auctions, but it%s sent %d auctions to us. Please use the normal \"Full Scan\" instead, if you want to accurately calculate the real market values of items. Your server's \"GetAll\" scan doesn't fetch all auctions!",
total,((total>shown)and" only"or""),shown
))
else
TSM:Print(format("All auctions received from server (%d auctions)...",Scan.getAllLoaded))
end
-- Collect relevant data about the auctions that we've received.
-- NOTE: "Scan.getAllLoaded" is the count of auctions we've received from
-- the server. One per listing. We keep this cached value to constantly verify
-- that we're still looking at the same auction-list while we're processing.
-- Process the collected "GetAll" auction data as a new "complete scan" with today's date.
TSM.db.factionrealm.lastCompleteScan=time()
TSM.Data:ProcessData(data)
TSM.Data:ProcessData(data,nil,verifyNewAlgorithm)
-- Show GUI progress while we're waiting for the processing.
-- NOTE: The status text will be set to "complete" elsewhere, automatically.
TSM.GUI:UpdateStatus(L["Processing data..."])
whileTSM.processingDatado
self:Sleep(0.2)
end
-- Processing is complete, so warn the user that they should reload the UI now.
TSM:Print(L["It is strongly recommended that you reload your ui (type '/reload') after running a GetAll scan. Otherwise, any other scans (Post/Cancel/Search/etc) will be much slower than normal."])
end
functionScan:AUCTION_ITEM_LIST_UPDATE()
Scan:UnregisterEvent("AUCTION_ITEM_LIST_UPDATE")
localnum,total=GetNumAuctionItems("list")
--if num ~= total or num == 0 then
ifnum==0then
-- shown = How many auctions we received in the current data batch.
-- total = The total number of auction items.
localshown,total=GetNumAuctionItems("list")
-- OLD TSM CODE: It assumes that "GetAll" returns ALL auctions on official
-- Blizzard servers, so it also checks if "shown equals the total".
--if shown ~= total or shown == 0 then
-- WORKAROUND: Because places like Warmane with huge auction houses DON'T
-- return all items even via "GetAll" scans, we must ignore shown-vs-total
-- mismatches. The server won't let us query the subsequent pages since
-- there isn't any pagination in the "GetAll" API, and wouldn't work anyway
-- due to the 15-30 minute cooldown for "GetAll" calls, so we can't fetch
-- all auctions if the server is too popular. For example, typical
-- Warmane-Icecrown "GetAll" results will be: shown=55000, total=122523,
-- meaning that "GetAll" only receives about half of the total auctions.
ifshown<=0then
--TSM:Print(L["GetAll scan did not run successfully due to issues on Blizzard's end. Using the TSM application for your scans is recommended."])
TSM:Print("GetAll scan did not run successfully.")
Scan:DoneScanning()
TSM:Print("GetAll: Scan failed due to server issues.")
Scan:DoneScanning()-- Sets isScanning and getAllLoaded to nil.
return
end
Scan.getAllLoaded=num
-- Cache the amount of auctions we received on the current "page/batch", so that
-- we can validate that we're looking at this "page" while processing later.
Scan.getAllLoaded=shown
end
functionScan:GetAllScanQuery()
-- NOTE: This API doesn't work properly on some servers. For example, on Warmane,
-- it always claims that you can do a "GetAll" scan after you log in, even
-- if you're on cooldown and the server will actually be ignoring your request,
-- which is why we had to implement timeout detection in "ProcessGetAllScan()".
localcanScan,canGetAll=CanSendAuctionQuery()
ifnotcanGetAllthenreturnTSM:Print(L["Can't run a GetAll scan right now."])end
@ -390,6 +390,13 @@ function Config:LoadOptions(container)
relativeWidth=0.5,
tooltip=L["If checked, AuctionDB will add a tab to the AH to allow for in-game scans. If you are using the TSM app exclusively for your scans, you may want to hide it by unchecking this option. This option requires a reload to take effect."],
},
{
type="CheckBox",
label=L["Disable \"GetAll\" Auction Scans"],
settingInfo={TSM.db.profile,"disableGetAll"},
relativeWidth=0.5,
tooltip=L["If checked, AuctionDB will not perform \"GetAll\" scans. This is useful if your server doesn't return all auctions in its \"GetAll\" results, which means that you'll get incorrect market value calculations for all items. If you're playing on such servers, it's best to disable the \"GetAll\" feature to avoid accidentally polluting your price database with incorrect data. This option takes effect immediately, but requires a reload to completely hide the \"Run GetAll Scan\" button."],
itemID,data.quantity,old_marketValue==marketValueand"YES"or"NO",old_marketValue,marketValue,time_elapsed_old_ms,time_elapsed_new_ms,time_elapsed_old_ms>0and(time_elapsed_old_ms/time_elapsed_new_ms)ormath.huge))-- Prevents division by zero.
end
end
-- Detect whether it was POSSIBLE to calculate a market value, and
-- ONLY proceed with the item updates if we were able to calculate
-- a new market value. Otherwise, skip the item as if it "didn't even
-- exist in this scan", since it basically "doesn't exist" if there
-- were no buyout prices to calculate a new market value from!
-- NOTE: This can happen if the scan data only contained "bid without
-- buyout" items, meaning they didn't have any per-item buyout data,
-- which can ONLY happen via "Scanning.lua:ProcessScanData()" when
-- doing a normal "Full Scan" or "Group Scan" (not "GetAll"). If
-- there aren't any buyout prices for the item, it still gets added
-- without any "records". This differs from "GetAll" which only adds
-- items to the queue if they had at least one "buyout price" auction.
-- NOTE: We're skipping the empty/indeterminable items to ensure that
-- we have identical behavior for both "GetAll" and all other scan
-- types, so that we NEVER add "empty/missing" market values for items!
-- NOTE: We allow a market value of "0", since it means there was
-- valid data in the calculations. However, "0" is extremely unlikely
-- since it would require a single, huge stack of items for a price
-- of 1 copper or so, to make the per-item market value end up at
-- just "0" for that item. Basically, it's never gonna happen!
ifmarketValueand(marketValue>=0)then
-- Fetch our archived data (if we have any) for this itemID.
--- Calculate the current market value of an item, from the given scan data.
-- @param data The market scan data. Beware that we will automatically mutate the "data.records" table to sort the incoming data!
-- @param[opt] hide_oldschool_warning Boolean 'true' to suppress the warning if you're using the old-school algorithm. This is only useful when benchmarking!
L["ScrollWheel Direction (both recommended):"]="스크롤휠 방향 (둘다 체크 추천)"
L["Select a duration in this dropdown and click on the button below to cancel all auctions at or below this duration."]="이 드롭다운에서 기간을 선택하고 아래의 버튼을 클릭하면 지정한 기간 또는 그 이하의 모든 경매는 취소됩니다."-- Needs review
L["ScrollWheel Direction (both recommended):"]="Направление прокрутки колесика (рекомендованы оба):"
L["Select a duration in this dropdown and click on the button below to cancel all auctions at or below this duration."]="Выберите длительность из списка и кликните на кнопку ниже, чтобы отменить все акционы ниже этой длительности."
L["ScrollWheel Direction (both recommended):"]="滚轮方向 (建议都选):"
L["Select a duration in this dropdown and click on the button below to cancel all auctions at or below this duration."]="在本下拉列表中选择一个期限,然后点击下面的按钮来取消低于这个时间的拍卖。"
-- L["Select the groups which you would like to include in the search."] = ""
L["'%s' has a Shopping operation of '%s' which no longer exists. Shopping will ignore this group until this is fixed."]="\"% s \" имеет Торговые операции '%s', которая больше не существует. Торговые будете игнорировать эту группу до тех пор, пока это будет Исправлено."-- Needs review