This commit is contained in:
Andrew6810
2022-11-05 21:19:42 -07:00
parent b79f4bd588
commit f3e579cb57
386 changed files with 93729 additions and 2 deletions
+21
View File
@@ -0,0 +1,21 @@
All rights are reserved unless explicitly stated below. The "license
holder" is the manager of this project, Sapu94 (sapu94@gmail.com).
Exceptions:
1) The use of this addon in accordance with all applicable terms set by
Blizzard Entertainment for addon use and game play is permitted.
2) Modifications for personal use or submission to license holder are
permitted. Modified versions of the works, derivative works, modified
sections of the works, and instructions for how to modify the works are
all prohibited unless the express consent of the license holder is
granted.
Comments:
1) Permission to use sections of the works in your own work is very
likely to be granted upon contacting the license holder.
2) The right to distribute the works is reserved by the license holder.
In no way or form may a person other than the license holder distribute
the works.
3) Please contact the license holder if you have any questions at all
regarding this license at the following email address: sapu94@gmail.com
@@ -0,0 +1,187 @@
-- ------------------------------------------------------------------------------ --
-- TradeSkillMaster_Auctioning --
-- http://www.curse.com/addons/wow/tradeskillmaster_auctioning --
-- --
-- A TradeSkillMaster Addon (http://tradeskillmaster.com) --
-- All Rights Reserved* - Detailed license information included with addon. --
-- ------------------------------------------------------------------------------ --
local TSM = select(2, ...)
TSM = LibStub("AceAddon-3.0"):NewAddon(TSM, "TSM_Auctioning", "AceEvent-3.0", "AceConsole-3.0")
TSM.status = {}
local AceGUI = LibStub("AceGUI-3.0")
local L = LibStub("AceLocale-3.0"):GetLocale("TradeSkillMaster_Auctioning") -- loads the localization table
TSM.operationLookup = {}
TSM.operationNameLookup = {}
local savedDBDefaults = {
profile = {
},
global = {
optionsTreeStatus = {},
scanCompleteSound = 1,
cancelWithBid = false,
matchWhitelist = true,
roundNormalPrice = false,
disableInvalidMsg = false,
defaultOperationTab = 1,
priceColumn = 1,
tooltip = true,
},
factionrealm = {
player = {},
whitelist = {},
lastSoldFilter = 0,
},
}
-- Addon loaded
function TSM:OnInitialize()
-- load the savedDB into TSM.db
TSM.db = LibStub:GetLibrary("AceDB-3.0"):New("TradeSkillMaster_AuctioningDB", savedDBDefaults, true)
for name, module in pairs(TSM.modules) do
TSM[name] = module
end
-- Add this character to the alt list so it's not undercut by the player
TSM.db.factionrealm.player[UnitName("player")] = true
-- register this module with TSM
TSM:RegisterModule()
-- clear out 1.x settings
if TSM.db.profile.groups then
for _, profile in ipairs(TSM.db:GetProfiles()) do
TSM.db:SetProfile(profile)
TSM.db:ResetProfile()
end
end
for _ in TSMAPI:GetTSMProfileIterator() do
for _, operation in pairs(TSM.operations) do
operation.resetMaxInventory = operation.resetMaxInventory or TSM.operationDefaults.resetMaxInventory
operation.aboveMax = operation.aboveMax or TSM.operationDefaults.aboveMax
operation.keepQuantity = operation.keepQuantity or TSM.operationDefaults.keepQuantity
end
end
end
-- registers this module with TSM by first setting all fields and then calling TSMAPI:NewModule().
function TSM:RegisterModule()
TSM.operations = { maxOperations = 5, callbackOptions = "Options:Load", callbackInfo = "GetOperationInfo" }
TSM.auctionTab = { callbackShow = "GUI:ShowSelectionFrame", callbackHide = "GUI:HideSelectionFrame" }
TSM.bankUiButton = { callback = "Util:createTab" }
TSM.tooltipOptions = { callback = "Options:LoadTooltipOptions" }
TSMAPI:NewModule(TSM)
end
function TSM:GetOperationInfo(operationName)
TSMAPI:UpdateOperation("Auctioning", operationName)
local operation = TSM.operations[operationName]
if not operation then return end
local parts = {}
-- get the post string
if operation.postCap == 0 then
tinsert(parts, L["No posting."])
else
tinsert(parts, format(L["Posting %d stack(s) of %d for %d hours."], operation.postCap, operation.stackSize, operation.duration))
end
-- get the cancel string
if operation.cancelUndercut and operation.cancelRepost then
tinsert(parts, format(L["Canceling undercut auctions and to repost higher."]))
elseif operation.cancelUndercut then
tinsert(parts, format(L["Canceling undercut auctions."]))
elseif operation.cancelRepost then
tinsert(parts, format(L["Canceling to repost higher."]))
else
tinsert(parts, L["Not canceling."])
end
-- get the reset string
if operation.resetEnabled then
tinsert(parts, L["Resetting enabled."])
else
tinsert(parts, L["Not resetting."])
end
return table.concat(parts, " ")
end
TSM.operationDefaults = {
-- general
matchStackSize = nil,
ignoreLowDuration = 0,
ignorePlayer = {},
ignoreFactionrealm = {},
relationships = {},
-- post
stackSize = 1,
stackSizeIsCap = nil,
postCap = 1,
keepQuantity = 0,
duration = 24,
bidPercent = 1,
undercut = 1,
minPrice = 50000,
maxPrice = 5000000,
normalPrice = 1000000,
priceReset = "none",
aboveMax = "normalPrice",
-- cancel
cancelUndercut = true,
keepPosted = 0,
cancelRepost = true,
cancelRepostThreshold = 10000,
-- reset
resetEnabled = nil,
resetMaxQuantity = 5,
resetMaxInventory = 10,
resetMaxCost = 500000,
resetMinProfit = 500000,
resetResolution = 100,
resetMaxItemCost = 1000000,
}
function TSM:GetTooltip(itemString)
if not TSM.db.global.tooltip then return end
local text = {}
local moneyCoinsTooltip = TSMAPI:GetMoneyCoinsTooltip()
itemString = TSMAPI:GetBaseItemString(itemString, true)
local operations = TSMAPI:GetItemOperation(itemString, "Auctioning")
if not operations or not operations[1] or not TSM.operations[operations[1]] then return end
TSMAPI:UpdateOperation("Auctioning", operations[1])
local prices = TSM.Util:GetItemPrices(TSM.operations[operations[1]], itemString)
if prices then
local minPrice, normPrice, maxPrice
if moneyCoinsTooltip then
minPrice = (TSMAPI:FormatTextMoneyIcon(prices.minPrice, "|cffffffff") or "|cffffffff---|r")
normPrice = (TSMAPI:FormatTextMoneyIcon(prices.normalPrice, "|cffffffff") or "|cffffffff---|r")
maxPrice = (TSMAPI:FormatTextMoneyIcon(prices.maxPrice, "|cffffffff") or "|cffffffff---|r")
else
minPrice = (TSMAPI:FormatTextMoney(prices.minPrice, "|cffffffff") or "|cffffffff---|r")
normPrice = (TSMAPI:FormatTextMoney(prices.normalPrice, "|cffffffff") or "|cffffffff---|r")
maxPrice = (TSMAPI:FormatTextMoney(prices.maxPrice, "|cffffffff") or "|cffffffff---|r")
end
tinsert(text, { left = " " .. L["Auctioning Prices:"], right = format(L["Min (%s), Normal (%s), Max (%s)"], minPrice, normPrice, maxPrice) })
end
if #text > 0 then
tinsert(text, 1, "|cffffff00" .. "TSM Auctioning:")
return text
end
end
function TSM:GetAuctionPlayer(player, player_full)
local realm = GetRealmName() or ""
if player_full and strjoin("-", player, realm) ~= player_full then
return player_full
else
return player
end
end
@@ -0,0 +1,33 @@
## Interface: 30300
## Title: |cff00ff00TradeSkillMaster_Auctioning|r
## Notes: Manages the posting, canceling, and resetting of auctions.
## Author: Sapu94, Bart39
## Version: v2.3.3
## Dependency: TradeSkillMaster
## SavedVariables: TradeSkillMaster_AuctioningDB
## X-Curse-Packaged-Version: v2.3.3
## X-Curse-Project-Name: TradeSkillMaster_Auctioning
## X-Curse-Project-ID: tradeskillmaster_auctioning
## X-Curse-Repository-ID: wow/tradeskillmaster_auctioning/mainline
Locale\enUS.lua
Locale\deDE.lua
Locale\esES.lua
Locale\esMX.lua
Locale\frFR.lua
Locale\koKR.lua
Locale\ruRU.lua
Locale\zhCN.lua
Locale\zhTW.lua
Locale\ptBR.lua
TradeSkillMaster_Auctioning.lua
modules\Log.lua
modules\ScanUtil.lua
modules\Manage.lua
modules\CancelScan.lua
modules\PostScan.lua
modules\ResetScan.lua
modules\GUI.lua
modules\Util.lua
modules\Options.lua
+241
View File
@@ -0,0 +1,241 @@
v2.3.3
*Fixed typo in normal price tooltip.
*Taking advantage of TSMAPI:IsPlayer() for better connected realm support.
v2.3.2
*Fixed bug with max inventory quantity not working for reset scan.
v2.3.1
*No update. Trying to fix issue with curse.
v2.3
*Added keep quantity to Auctioning operations (including relationship support).
*Added warning (in chat) for items with min prices below the vendor sell price.
*Added relationship support for "Max Inventory Quantity" reset option.
v2.2.7
*The sound for when a post/cancel scan is complete is now defaulted to off.
v2.2.6
*Fixed bug with getting battle pet stack size.
v2.2.5
*Added the option to select the sound that is played when post / cancel scan is complete.
v2.2.4
*Fixed a few bugs in the post scan code.
*Fixed bug with the cancel scan not canceling at the min price when it should to repost higher.
v2.2.3
*Auctioning will now the bid as well as the buyout of whitelisted players (when it previously just matched the buyout).
*Fixed a bug with multiple profiles.
v2.2.2
*Fixed bug with cancel scan when player's auction was the only one and "above max" price was set to post at max.
v2.2.1
*Updating group tree creation API call.
v2.2
*Fixed bug with the post scan searching for operations which have posting disabled.
*Fixed bug with log tooltips not displaying the lowest buyout.
*Fixed intermittent issue with the post scan not finding an item and throwing an error.
*Added "above max price" dropdown to post options within operations.
v2.1.1
*Fixed bug with sorting of log.
v2.1
*Added reset method to ignore all auctions below min price.
*Enabled sorting of post / cancel log.
*Added "Max Inventory Quantity" option to the reset options of operations.
*Enabled sorting of post/cancel log.
*Added custom filter support for canceling all auctions below/above a buyout price.
*Fixed some 5.4 issues.
*Updated TOC for patch 5.4.
*Fixed bug with cancel scan validating repost higher threshold when not enabled.
v2.0.2
*Fixed localization related error.
*Fixed bug related to canceling auctions which the player has undercut.
*Moved operation management to new tab.
v2.0.1
*Fixed a bug with posting against whitelist auctions above the max price.
*Fixed bug with cancel scan scanning operations without canceling enabled.
v2.0
*First 2.0 Version!
\\
v1.3
*Updated for patch 5.2.
*The cancel scan should no longer cause UI lag when requeuing items which didn't cancel correctly the first time.
*Made the "___ as a ___" price source dropboxes slightly larger.
*Fixed a global usage of _ which was causing taint in the glyph UI.
*Added basic support for battle pets.
*Added category management buttons for removing all category overrides and for removing all group overrides.
*Many other minor bug fixes and improvements.
v1.2
*Added Auctioning group creation wizard.
*Fixed some divide by zero issues for patch 5.0.4.
*The maximum price gap setting was removed.
*Fixed a bug with scanning items by itemID.
*Added tooltips to resetscan log.
*Added support for the new TSM design.
*Added feature for creating shopping lists from Auctioning groups / categories.
*Fixed a bug with items at reset price being incorrectly canceled.
*Added quick group creation feature.
*Many other minor bug fixes and improvements.
v1.1
*Added tooltips to the add/remove items pages for the items in the lists.
*Improved the sorting of the post/cancel log.
*Added an option for items to be added to groups by itemID rather than itemString.
*Added an API to allow Warehousing to get the post num from Auctioning.
*The processing for the reset scan should no longer cause noticeable lag.
*Added group validation back into the addon (never meant to take it out).
*Changed the default fallback from 5g to 1000g.
*Many other minor bug fixes and improvements.
v1.0
*First Release Version!
**Beta Versions:**
v0.3.3
*Fixed an error that was preventing people who hadn't updated in a while from posting.
*Fixed a bug that would cause an error when setting the reset method to "custom" in some situations.
v0.3.2
*Updated the TOC for patch 4.2.
*Many other minor bug fixes and improvements.
v0.3.1
*A bunch of minor bug fixes and improvements.
v0.3
*Fixed a bug with Crafting not being able to get fallback data accurately for items with a fallback set as a % of something at the category level.
*Fixed a bug with improper rounding causing items with a stack size greater than one to sometimes not be canceled correctly.
*Fixed a bug with items that are posting at a reset price not getting canceled correctly.
*Fixed a bug where the counts were not updating correctly on items there were canceling due to reset prices.
*Fixed a bug with the undercut editbox not updating / showing correctly.
*You can no longer create a nameless group / category.
*Fixed a bug with posting more than one stack worth of an item.
*Cleaned up a lot of the posting and cancel all code.
*Added a warning message for when somebody moves an item around in their bags while a post scan is running. Don't do it!
*Added group validation to the start of a post / cancel scan. A popup will be shown if invalid groups are found.
*Many other minor bug fixes and improvements.
v0.2.6
*Added support for setting threshold / fallback as a percent of values from TheUndermineJournal addon.
*Fixed a bug with the "Don't Import Already Grouped Items" doing the opposite of what it was set to.
v0.2.5
*Updated the scanning code to work better with the new version of Auctioneer.
*Made a ton of improvements and tweaks to the bot prevention code.
*Many other minor bug fixes and improvements.
v0.2.4
*Fixed a bug where patterns that taught you how to make BOP items weren't able to be added.
*Many other minor bug fixes and improvements.
v0.2.3
*Fixed a bug where smart group creation wasn't working for items with "-" in their name.
*Fixed a ton of bugs / annoyances with the Auctioning options.
*Updated the TOC to 4.1.
*Many other minor bug fixes and improvements.
v0.2.2
*Fixed a bug where after adding/removing an item/group, the tab was being changed to "Management".
*Fixed a bug where soulbound keys were showing up in the add/remove items tab.
*The "Number of Stacks" label in the post frame will now show the number of stacks remaining to be posted.
*Made the initial post scan processing take far less time (should no longer be noticable at all).
*Added the ability to enter "0.5" into the 2nd box in the Cancel All window to cancel all auctions with short duration.
*Added a "Smart group creation" option to the top "Options" page. Check the tooltip to see what it does.
*Many other minor bug fixes and improvements.
v0.2.1
*Fixed a bug with how Auctioning gets info about what the player has in their bags.
*Posting a large number of auctions should no longer freeze the game client for a few seconds after hitting the "Post" icon.
*Fixed a bug with items posted at % fallbacks being incorrectly canceled.
*Added the capability to deal with items on the keyring.
*Many other minor bug fixes and improvements.
v0.2
*Added a "Show Auctions" button to the post / cancel frame for viewing currently posted auctions the current item.
*Added a "Edit Post Price" button to the post frame for adjusting the post buyout.
*Added a method for importing / exporting groups.
*Added a blacklist feature.
*Many other minor bug fixes and improvements.
v0.1.12
*Added a config button to post / cancel frames.
*Fixed a bug with original config button in sidebar.
*Fixed a bug with renaming groups causing an error.
*Fixed a bug with smart canceling not taking into account "disable auto canceling" correctly.
*Added code to hopefully prevent stack overflows when posting large numbers of auctions.
*Added option for ignoring short duration auctions.
*Many other minor bug fixes and improvements.
v0.1.11
*Added an option for playing a sound when a scan is complete.
*You can now disable groups to prevent them from posting / canceling.
*Added a "Smart Scanning" option which won't scan for things that are set to not post / cancel.
*Many other minor bug fixes and improvements.
v0.1.10
*Fixed some bugs with items with bids on them getting canceled incorrectly.
*Changed the tab order for group / category settings.
*Skipping an item should no longer cause the post frame to bug out.
*Put in warnings for invalid threshold / fallback settings.
*Collapsed categories should now remain collapsed between sessions.
*Many other minor bug fixes and improvements.
v0.1.9
*Fixed the localization tags.
*Reverted the posting code back to when it was working. It will post correctly now but may leave some uneven stacks in the player's bags.
*Inlcuded new functions to provide compatibility with the new "Create Auctioning Groups" feature in Crafting.
*Many other minor changes and bug fixes.
v0.1.8
*Fixed some bugs with posting multiple stacks worth of one item.
*Randomly enchanted gear should now be posted properly.
*You can now use the link of an item as the name of a group.
v0.1.7
*Setting threshold/fallback as a % at the category or default level should now correctly be calculated per group rather than just assigning one value to every group.
*The evaluation of a non-overriden threshold / fallback setting will not show in the fallback/threshold editbox for the group.
*Fixed a bug with the rows in the Log overlapping after a status scan.
*Fixed a bug preventing posting of multiple stacks worth of some items.
*Many other minor changes and bug fixes.
v0.1.6
*Fixed the memory leak with the log.
*Fixed cancelall scans.
*Fixed a bug where adding items to Auctioning through Crafting was sometimes causing an error.
*Many other minor changes and bug fixes.
v0.1.5
*Settings should now properly transfer.
*Bindings are now saved by character.
*Many other bug fixes
v0.1.4
*Fixed a bug with the popups added in 0.1.3Beta
v0.1.3
*Added a popup for first time users when you first visit the Auctioning options.
v0.1.2
*Fixed a major bug with the groups not transferring correctly from APM.
v0.1.1
*Updated the changelog.
*Fixed a typo in the posting interface.
v0.1
*First Beta Release!
+273
View File
@@ -0,0 +1,273 @@
-- ------------------------------------------------------------------------------ --
-- TradeSkillMaster_Auctioning --
-- http://www.curse.com/addons/wow/tradeskillmaster_auctioning --
-- --
-- A TradeSkillMaster Addon (http://tradeskillmaster.com) --
-- All Rights Reserved* - Detailed license information included with addon. --
-- ------------------------------------------------------------------------------ --
-- TradeSkillMaster_Auctioning Locale - deDE
-- Please use the localization app on CurseForge to update this
-- http://wow.curseforge.com/addons/TradeSkillMaster_Auctioning/localization/
local L = LibStub("AceLocale-3.0"):NewLocale("TradeSkillMaster_Auctioning", "deDE")
if not L then return end
L["2 to 12 hrs"] = "2 bis 12 Std" -- Needs review
L["30min to 2hrs"] = "30 min bis 2 Std" -- Needs review
L["Add a new player to your whitelist."] = "Neuen Spieler zu deiner Whitelist hinzufügen."
L["Add player"] = "Spieler hinzufügen"
L["Any auctions at or below the selected duration will be ignored. Selecting \"<none>\" will cause no auctions to be ignored based on duration."] = "Alle Auktionen mit oder unterhalb der gewählten Autionsdauer werden ignoriert. Die Auswahl \"<keine>\" bewirkt, dass Auktionen niemals aufgrund der Auktionsdauer ignoriert werden." -- Needs review
L["At normal price and not undercut."] = "Zum Normalpreis und nicht unterboten." -- Needs review
L["Auction Buyout"] = "Sofortkauf" -- Needs review
L["Auction Buyout (Stack Price):"] = "Sofortkauf (Stack-Preis)" -- Needs review
L["Auction has been bid on."] = "Auf diese Auktion wurde geboten"
L["Auctioning operations contain settings for posting, canceling, and resetting items in a group. Type the name of the new operation into the box below and hit 'enter' to create a new Crafting operation."] = "Auktionsoperationen enthalten Einstellungen zum Einstellen, Abbrechen und Zurücksetzen von Gegenständen einer Gruppe. Gib den Namen der neuen Operation in die Box unten ein und drücke 'Eingabe' um eine neue Herstellungsoperation zu erstellen." -- Needs review
L["Auctioning Prices:"] = "Auktionspreise:" -- Needs review
L["Auction not found. Skipped."] = "Auktion nicht gefunden. Übersprungen." -- Needs review
L["Auction Price Settings"] = "Auktionspreis-Einstellungen" -- Needs review
L["Auction Settings"] = "Auktionseinstellungen" -- Needs review
-- L["auctions of|r %s"] = ""
L["Below min price, posting at reset price."] = "Unter Minimalpreis, erstelle zum Rücksetzpreis." -- Needs review
L["Bid percent"] = "Gebot Prozent"
L["Cancel"] = "Abbrechen"
L["Cancel All Auctions"] = "Alle Auktionen abbrechen" -- Needs review
L["Cancel Auctions with Bids"] = "Auktionen mit Geboten abrrechen" -- Needs review
L["Cancel Filter:"] = "Abbrechen Filter:" -- Needs review
L["Canceling all auctions."] = "Alle Auktionen werden abgebrochen." -- Needs review
L["Canceling auction which you've undercut."] = "Breche Auktion ab die du unterboten hast." -- Needs review
L["Canceling %d / %d"] = "Abbruch %d / %d" -- Needs review
L["Canceling to repost at higher price."] = "Breche Auktion ab um zu höheren Preis einzustellen." -- Needs review
L["Canceling to repost at reset price."] = "Breche Autkion ab um zum Grundpreis erneut einzustellen." -- Needs review
L["Canceling to repost higher."] = "Abbruch um teurer anzubieten." -- Needs review
L["Canceling undercut auctions."] = "Abbruch unterbotene Auktionen." -- Needs review
L["Canceling undercut auctions and to repost higher."] = "Abbruch unterbotene Auktionen und teurer anbieten." -- Needs review
L["Cancel Low Duration"] = "Abbruch kurze Dauer" -- Needs review
L["Cancel Scan Finished"] = "Abbruch-Scan abgeschlossen" -- Needs review
L["Cancel Settings"] = "Abbruch Einstellungen" -- Needs review
L["Cancel to Repost Higher"] = "Abbruch um teurer anzubieten" -- Needs review
L["Cancel Undercut Auctions"] = "Abbruch unterbotene Auktionen" -- Needs review
L["Cheapest auction below min price."] = "Günstigste Auktion unter Minimalpreis." -- Needs review
L["Click to show auctions for this item."] = "Klicke um Auktionen dieses Gegenstands anzuzeigen." -- Needs review
L["Confirming %d / %d"] = "Bestätige %d / %d" -- Needs review
L["Create Macro and Bind ScrollWheel (with selected options)"] = "Erstelle das Makro und lege es auf das Mausrad (mit den gewählten Optionen)"
L["Currently Owned:"] = "Derzeit in Besitz:" -- Needs review
L["Default Operation Tab"] = "Standard Operation Tab" -- Needs review
L["Delete"] = "Lösche"
L["Did not cancel %s because your cancel to repost threshold (%s) is invalid. Check your settings."] = "%s nicht abgebrochen weil deine Schwelle zum Wiedereinstellen (%s) ungültig ist. Überprüfe deine Einstellungen." -- Needs review
L["Did not cancel %s because your maximum price (%s) is invalid. Check your settings."] = "%s nicht abgebrochen weil dein Maximalpreis (%s) ungültig ist. Überprüfe deine Einstellungen." -- Needs review
L["Did not cancel %s because your maximum price (%s) is lower than your minimum price (%s). Check your settings."] = "%s nicht abgebrochen weil dein Maximalpreis (%s) niedriger als dein Minimalpreis (%s) ist. Überprüfe deine Einstellungen." -- Needs review
L["Did not cancel %s because your minimum price (%s) is invalid. Check your settings."] = "%s nicht abgebrochen weil dein Minimalpreis (%s) ungültig ist. Überprüfe deine Einstellungen." -- Needs review
L["Did not cancel %s because your normal price (%s) is invalid. Check your settings."] = "%s nicht abgebrochen weil dein Normalpreis (%s) ungültig ist. Überprüfe deine Einstellungen." -- Needs review
-- L["Did not cancel %s because your normal price (%s) is lower than your minimum price (%s). Check your settings."] = ""
-- L["Did not post %s because your maximum price (%s) is invalid. Check your settings."] = ""
-- L["Did not post %s because your maximum price (%s) is lower than your minimum price (%s). Check your settings."] = ""
-- L["Did not post %s because your minimum price (%s) is invalid. Check your settings."] = ""
-- L["Did not post %s because your normal price (%s) is invalid. Check your settings."] = ""
-- L["Did not post %s because your normal price (%s) is lower than your minimum price (%s). Check your settings."] = ""
-- L["Did not reset %s because your maximum price (%s) is invalid. Check your settings."] = ""
-- L["Did not reset %s because your maximum price (%s) is lower than your minimum price (%s). Check your settings."] = ""
-- L["Did not reset %s because your minimum price (%s) is invalid. Check your settings."] = ""
-- L["Did not reset %s because your normal price (%s) is invalid. Check your settings."] = ""
L["Did not reset %s because your normal price (%s) is lower than your minimum price (%s). Check your settings."] = "%s wurde nicht zurück gesetzt weil dein Normalpreis (%s) niedriger als dein Minimalpreis (%s) ist. Überprüfe deine Einstellungen." -- Needs review
L["Did not reset %s because your reset max cost (%s) is invalid. Check your settings."] = "%s wurde nicht zurück gesetzt weil deine maximalen Rücksetzkosten (%s) ungültig sind. Überprüfe deine Einstellungen." -- Needs review
L["Did not reset %s because your reset max item cost (%s) is invalid. Check your settings."] = "%s wurde nicht zurück gesetzt weil deine maximalen Gegenstandsrücksetzkosten (%s) ungültig sind. Überprüfe deine Einstellungen." -- Needs review
L["Did not reset %s because your reset min profit (%s) is invalid. Check your settings."] = "%s wurde nicht zurück gesetzt weil dein minimaler Rücksetzgewinn (%s) ungültig ist. Überprüfe deine Einstellungen." -- Needs review
-- L["Did not reset %s because your reset resolution (%s) is invalid. Check your settings."] = ""
L["Disable Invalid Price Warnings"] = "Warnungen für ungültige Preise deaktivieren" -- Needs review
L["Done Canceling"] = "Abbrechen beendet"
L["Done Posting"] = "Erstellen beendet" -- Needs review
L[ [=[Done Posting
Total value of your auctions: %s
Incoming Gold: %s]=] ] = [=[Einstellen Beendet
Gesamtwert deiner Auktionen: %s
Eintreffendes Gold: %s]=] -- Needs review
L["Done Scanning"] = "Scan beendet" -- Needs review
L[ [=[Done Scanning!
Could potentially reset %d items for %s profit.]=] ] = [=[Scan Beendet
Kann %d Gegenstände zurücksetzen für einen Gewinn von %s.]=] -- Needs review
L["Don't Post Items"] = "Erstelle keine Auktionen" -- Needs review
L["Down"] = "Runter"
L["Duration"] = "Dauer" -- Needs review
L["Edit Post Price"] = "Einstellpreis Ändern" -- Needs review
L["Enable Reset Scan"] = "Reset Scan aktivieren" -- Needs review
L["Enable Sounds"] = "Sounds aktivieren" -- Needs review
L["Error creating operation. Operation with name '%s' already exists."] = "Fehler beim Erstellen der Operation. Operation mit Namen '%s' existiert bereits." -- Needs review
L["General"] = "Allgemein"
-- L["General Operation Options"] = ""
L["General Options"] = "Allgemeine Optionen" -- Needs review
L["General Reset Settings"] = "Allgemeine Reset Einstellungen" -- Needs review
L["General Settings"] = "Allgemeine Optionen"
L["Give the new operation a name. A descriptive name will help you find this operation later."] = "Gib der neuen Operation einen Namen. Ein beschreibender Name hilft dir die Operation später wieder zu finden." -- Needs review
L["Help"] = "Hilfe"
L["How long auctions should be up for."] = "Wielange Auktionen dauern sollen."
L["How many auctions at the lowest price tier can be up at any one time. Setting this to 0 disables posting for any groups this operation is applied to."] = "Wieviele Auktionen sollen zum niedrigsten Preis auf einmal erstellt werden. Wenn auf 0 gesetzt werden keine Auktionen für alle Gruppen die diese Operation verwenden erstellt." -- Needs review
L["How many items should be in a single auction, 20 will mean they are posted in stacks of 20."] = "Wieviele Items sollen pro Auktion versteigert werden? 20 bedeutet, dass sie als Stacks (Paket) von 20 Items ins Auktionshaus gesetzt werden." -- Needs review
L["How much to undercut other auctions by. Format is in \"#g#s#c\". For example, \"50g30s\" means 50 gold, 30 silver, and no copper."] = "Um wieviel sollen andere Auktionen unterboten werden. Formatierung \"#g#s#c\", z.B. \"50g30s\" bedeutet 50 Gold, 30 Silber, kein Kupfer." -- Needs review
L["If an item can't be posted for at least this amount higher than its current value, it won't be canceled to repost higher."] = "Wenn ein Gegenstand nicht mindestens um den hier angegebenen Betrag als den aktuellen Wert angeboten werden kann, wird die Auktion nicht abgebrochen um sie teurer anzubieten." -- Needs review
L["If checked, a cancel scan will cancel any auctions which can be reposted for a higher price."] = "Wenn ausgewählt wird ein Abbruch-Scan jede Auktion abbrechen die zu einem höheren Preis angeboten werden kann." -- Needs review
-- L["If checked, a cancel scan will cancel any auctions which have been undercut and are still above your threshold."] = ""
L["If checked, Auctioning will ignore all auctions that are posted at a different stack size than your auctions. For example, if there are stacks of 1, 5, and 20 up and you're posting in stacks of 1, it'll ignore all stacks of 5 and 20."] = "Wenn ausgewählt wird Auctioning alle Auktionen ignorieren die nicht mit der von dir verwendeten Stapelgröße übereinstimmen. z.B. wenn es Stapel mit Größen von 1, 5 und 20 gibt du deine Auktionen in Stapeln zu 1 Stück erstellst werden Stapel der Größe 5 und 20 ignoriert." -- Needs review
-- L["If checked, groups which the opperation applies to will be included in a reset scan."] = ""
-- L["If checked, the minimum, normal and maximum prices of the first operation for the item will be shown in tooltips."] = ""
L["If checked, TSM will not print out a chat message when you have an invalid price for an item. However, it will still show as invalid in the log."] = "Wenn ausgewählt wird TSM keine Chatnachrichten ausgeben die einen ungültigen Preis für einen Gegenstand enthalten. Allerdings werden diese Fehler im Protokoll weiterhin geführt." -- Needs review
-- L["If checked, whenever you post an item at its normal price, the buyout will be rounded up to the nearest gold."] = ""
-- L["If enabled, instead of not posting when a whitelisted player has an auction posted, Auctioning will match their price."] = ""
L["If you don't have enough items for a full post, it will post with what you have."] = "Wenn Sie nicht genug Items für eine vollständige Auktion haben, wird es das versteigern, was Sie haben." -- Needs review
-- L["Ignore Low Duration Auctions"] = ""
L["Info"] = "Info"
L["Invalid scan data for item %s. Skipping this item."] = "Ungültige Scandaten für Gegenstand %s. Überspringe Gegenstand." -- Needs review
L["Invalid seller data returned by server."] = "Ungültige Verkäufer-Daten wurden vom Server gesendet" -- Needs review
L["Item"] = "Gegenstand"
L["Item/Group is invalid."] = "Gegenstand/Gruppe ist ungültig"
-- L["Keeping undercut auctions posted."] = ""
-- L["Keep Posted"] = ""
L["Log Info:"] = "Log-Informationen:" -- Needs review
L["Low Duration"] = "Niedrige Dauer" -- Needs review
L["Lowest auction by whitelisted player."] = "Niedrigste Auktion nach Spielern auf der Whitelist"
L["Lowest Buyout"] = "Niedrigster Sofortkauf"
L["Lowest Buyout:"] = "Niedrigster Sofortkauf:"
L["Macro created and keybinding set!"] = "Makro erstellt und Tastenbelegung gesetzt!" -- Needs review
L["Macro Help"] = "Macro Hilfe"
-- L["Match Stack Size"] = ""
-- L["Match Whitelist Players"] = ""
L["Max Cost:"] = "Maximalkosten:" -- Needs review
L["Max Cost Per Item"] = "Maximalkosten je Gegenstand" -- Needs review
L["Maximum amount already posted."] = "Maximale Menge bereits eingestellt." -- Needs review
L["Maximum Price"] = "Maximalpreis" -- Needs review
L["Maximum Price:"] = "Maximalpreis:" -- Needs review
L["Max Price Per:"] = "Maximalkosten je:" -- Needs review
L["Max Quantity:"] = "Maximale Anzahl:" -- Needs review
-- L["Max Quantity to Buy"] = ""
-- L["Max Reset Cost"] = ""
-- L["Minimum Price:"] = ""
-- L["Minimum Price (aka Threshold)"] = ""
L["Min Profit:"] = "Minimaler Gewinn:" -- Needs review
-- L["Min Reset Profit"] = ""
-- L["Min (%s), Normal (%s), Max (%s)"] = ""
L["Modifiers:"] = "Modifikator"
-- L["Move AH Shortfall To Bags"] = ""
-- L["Move Group To Bags"] = ""
-- L["Move Group To Bank"] = ""
-- L["Move Non Group Items to Bank"] = ""
-- L["Move Post Cap To Bags"] = ""
L["Must wait for scan to finish before starting to reset."] = "Du musst warten, bis der Scan fertig ist, bevor du mit dem Zurücksetzen beginnen kannst"
-- L["New Operation"] = ""
L["No Items to Reset"] = "Keine Gegenstände zum Zurücksetzen"
L["<none>"] = "<keine>"
-- L["No posting."] = ""
-- L["Normal Price:"] = ""
-- L["Normal Price (aka Fallback)"] = ""
-- L["Not canceling."] = ""
L["Not canceling auction at reset price."] = "Breche keine Auktion des Zurücksetzenpreis ab." -- Needs review
-- L["Not canceling auction below min price."] = ""
L["Not enough items in bags."] = "Nicht genügend Gegenstände in den Taschen."
-- L["NOTE: You can right click on any of the price settings below to show a window which will help with more advanced price settings such as using a % of another price source."] = ""
-- L["Nothing to Move"] = ""
-- L["Not resetting."] = ""
L["Operation"] = "Operation" -- Needs review
L["Operation Name"] = "Operationsname" -- Needs review
L["Operations"] = "Operationen" -- Needs review
L["Options"] = "Optionen"
L["Other Auctioning Searches"] = "Andere Auktionssuchen" -- Needs review
L["Percentage of the buyout as bid, if you set this to 90% then a 100g buyout will have a 90g bid."] = "Prozentsatz des Sofortkaufpreises als Mindestgebot. Wenn du diesen auf 90% setzt, dann wird ein Item mit Sofortkaufpreis von 100g ein Mindestgebot von 90g haben." -- Needs review
L["Player name"] = "Spielername"
L["Plays the ready check sound when a post / cancel scan is complete and items are ready to be posting / canceled (the gray bar is all the way across)."] = "Spielt den \"Bereitschaftscheck\"-Soundeffekt ab, wenn ein Erstellen-/Abbrechen-Scan abgeschlossen wurde und Gegenstände zum Erstellen / Abbrechen vorhanden sind (Der graue Balken ist komplett durchgelaufen)." -- Needs review
L["Please don't move items around in your bags while a post scan is running! The item was skipped to avoid an incorrect item being posted."] = "Bitte bewege keine Gegenstände in deinen Taschen, während der Erstellen-Scan läuft! Der Gegenstand wurde übersprungen um zu verhindern, dass ein falscher Gegenstand verkauft wird."
L["Post"] = "Erstellen"
L["Post at Maximum Price"] = "Erstelle zum Maximalpreis" -- Needs review
L["Post at Minimum Price"] = "Erstelle zum Minimalpreis" -- Needs review
L["Post at Normal Price"] = "Erstelle zum Normalpreis" -- Needs review
-- L["Post Cap"] = ""
L["Posted at whitelisted player's price."] = "Zum Preis eines Charakters auf der Whitelist erstellt" -- Needs review
-- L["Posting at normal price."] = ""
L["Posting at whitelisted player's price."] = "Erstelle auf Preisniveau des Spielers auf der Whitelist."
L["Posting at your current price."] = "Erstelle mit deinem aktuellen Preis."
L["Posting %d / %d"] = "Erstelle %d / %d" -- Needs review
L["Posting %d stack(s) of %d for %d hours."] = "Erstelle %d Stapel von %d für %d Stunden." -- Needs review
-- L["Posting Price Settings"] = ""
L["Post Scan Finished"] = "Erstellen-Scan abgeschlossen"
L["Post Settings"] = "Erstellen Einstellungen" -- Needs review
L["Preparing Filter %d / %d"] = "Bereite Filter %d / %d vor" -- Needs review
L["Preparing Filters..."] = "Bereite Filter vor..." -- Needs review
-- L["Preparing to Move"] = ""
-- L["Price Resolution"] = ""
-- L["Price to post at if there are no auctions up under your maximum price. This includes the case where there's none of an item on the AH."] = ""
L["Processing Items..."] = "Verarbeite Gegentände..."
L["Profit:"] = "Gewinn:"
L["Profit Per Item"] = "Gewinn pro Gegenstand"
L["Quantity (Yours)"] = "Menge (Deine)"
-- L["Relationships"] = ""
-- L["Repost Higher Threshold"] = ""
-- L["Reset"] = ""
L["Reset Scan Finished"] = "Zurücksetzen-Scan abgeschlossen" -- Needs review
-- L["Reset Settings"] = ""
-- L["Resetting enabled."] = ""
-- L["Restart"] = ""
L["Return to Summary"] = "Zurück zur Zusammenfassung"
L["Right-Click to add %s to your friends list."] = "Rechtsklick um %s zu deiner Freundesliste hinzuzufügen."
-- L["Round Normal Price"] = ""
L["Running Scan..."] = "Scan läuft..."
L["Save New Price"] = "Speichere den neuen Preis"
-- L["Scan Complete!"] = ""
-- L["Scanning %d / %d"] = ""
-- L["Scanning %d / %d (Page %d / %d)"] = ""
L["ScrollWheel Direction (both recommended):"] = "Mausradrichtungen (beide empfohlen)"
-- 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 scan."] = ""
L["Seller"] = "Verkäufer"
L["Seller name of lowest auction for item %s was not returned from server. Skipping this item."] = "Verkäufer der niedrigsten Auktion für den Gegenstand %s wurde vom Server nicht zurückgegeben. Dieser Gegentand wird übersprungen." -- Needs review
L["'%s' has an Auctioning operation of '%s' which no longer exists."] = "'%s' hat eine Auktionsoperation '%s' die nicht mehr existiert." -- Needs review
L["'%s' has an Auctioning operation of '%s' which no longer exists. Auctioning will ignore this group until this is fixed."] = "'%s' hat eine Auktionsoperation '%s' die nicht mehr existiert. Auctioning ignoriert diese Gruppe bis der Fehler behoben ist." -- Needs review
L["Shift-Right-Click to show the options for this item's Auctioning group."] = "Shift-Rechtsklick um die Optionen für die Auktionsgruppe dieses Gegenstandes zu zeigen."
-- L["Shift-Right-Click to show the options for this operation.|r"] = ""
L["Show All Auctions"] = "Zeige alle Auktionen"
-- L["Show Auctioning values in Tooltip"] = ""
L["Show Item Auctions"] = "Auktionen des Gegenstandes anzeigen"
L["Show Log"] = "Log anzeigen"
L["%s item(s) to buy/cancel"] = "%s item(s) zum kaufen/abbrechen"
L["Skip"] = "Überspringen"
L["Stack Size"] = "Stapelgröße"
-- L["Start Cancel Scan"] = ""
L["Starting Scan..."] = "Starte Scan..." -- Needs review
L["Start Post Scan"] = "Beginne Erstellen Scan" -- Needs review
L["Start Reset Scan"] = "Beginne Reset Scan" -- Needs review
L["Stop"] = "Stop" -- Needs review
L["Target Price"] = "Preisziel" -- Needs review
L["Target Price:"] = "Preisziel:" -- Needs review
L["The filter cannot be empty. If you'd like to cancel all auctions, use the 'Cancel All Auctions' button."] = "Der Filter can nicht leer sein. Wenn du alle Auktionen abbrechen willst, benutze den 'Alle Auktionen abbrechen' Button." -- Needs review
L["The lowest price you want an item to be posted for. Auctioning will not undercut auctions below this price."] = "Die niedrigste Preis zu dem ein Gegenstand angeboten werden soll. Auctioning wird Auktionen unter diesem Preis nicht unterbieten." -- Needs review
L["The maximum amount that you want to spend in order to reset a particular item. This is the total amount, not a per-item amount."] = "Die maximale Summe, die du ausgeben möchtest um ein bestimmtes Item zurückzusetzen. Dies ist die Gesamtsumme, nicht die Summe pro Item."
L["The maximum price you want an item to be posted for. Auctioning will not undercut auctions above this price."] = "Der höchste Preis zu dem ein Gegenstand angeboten werden soll. Auctioning wird keine Auktionen über diesem Preis unterbieten." -- Needs review
L["The minimum profit you would want to make from doing a reset. This is a per-item price where profit is the price you reset to minus the average price you spent per item."] = "Der minimale Gewinn, den du durch ein Zurücksetzen erwirtschaften möchtest. Dies ist der Preis pro Item, wobei der Gewinn der Preis ist, auf den zurück gesetzt wird abzüglich der durchschnittlichen Summe, die du dafür pro Item ausgeben musst." -- Needs review
L["There are two ways of making clicking the Post / Cancel Auction button easier. You can put %s and %s in a macro (on separate lines), or use the utility below to have a macro automatically made and bound to scrollwheel for you."] = "Es gibt zwei Möglichkeiten Ihnen das Klicken von \"Erstelle Auktion/Auktion abbrechen\" zu erleichtern. Sie können %s und %s in ein Makro einfügen (in seperate Zeilen), oder die untenstehende Funktion verwenden um automatisch ein Macro zu erstellen und es Ihrem Mausrad zuzuweisen." -- Needs review
L["This determines what size range of prices should be considered a single price point for the reset scan. For example, if this is set to 1s, an auction at 20g50s20c and an auction at 20g49s45c will both be considered to be the same price level."] = "Dies bestimmt welche Preisspanne als einzelner Preispunkt im Zurücksetzenscan gewertet werden soll. Wenn z.B. 1s eingestellt ist, werden Auktionen mit 20g50s20c und 20g49s45c als eine Preisebene gewertet."
-- L["This dropdown determines the default tab when you visit an operation."] = ""
-- L["This dropdown determines what Auctioning will do when the market for an item goes below your minimum price. You can either not post the items or post at one of your configured prices."] = ""
L["This is the maximum amount you want to pay for a single item when reseting."] = "Die maximale Summe, die du für einen einzelnen Gegenstand während des Zurücksetzens ausgeben möchtest."
L["This item does not have any seller data."] = "Dieser Gegestand hat keine Verkäuferdaten." -- Needs review
L["This number of undercut auctions will be kept on the auction house (not canceled) when doing a cancel scan."] = "Diese Anzahl unterbotener Auktionen wird im Auktionshaus belassen (nicht abgebrochen) bei einem Abbruch Scan." -- Needs review
L["Total Cost"] = "Gesamtkosten" -- Needs review
L["Under 30min"] = "Unter 30min" -- Needs review
L["Undercut Amount"] = "Unterbieten Betrag" -- Needs review
L["Undercut by whitelisted player."] = "Unterboten von einem Spieler auf der Whitelist." -- Needs review
L["Undercutting competition."] = "Unterbiete Konkurrenz."
L["Up"] = "Hoch" -- Needs review
L["Use Stack Size as Cap"] = "Verwende Stapelgröße als Limit" -- Needs review
-- L["When Below Threshold (aka Reset Method)"] = ""
L["Whitelist"] = "Whitelist"
L["Whitelists allow you to set other players besides you and your alts that you do not want to undercut; however, if somebody on your whitelist matches your buyout but lists a lower bid it will still consider them undercutting."] = "Whitelists erlauben Ihnen andere Spieler, neben Ihnen und Ihren Zweitcharakteren, zu bestimmen, die Sie nicht unterbieten wollen. Sollte aber jemand der sich auf Ihrer Whitelist befindet, zwar zum gleichen Sofortkaufspreis, allerdings zu einem niedrigeren Gebotspreis Autionen erstellen, wird er von der Whitelist-Regel ausgenommen." -- Needs review
L["Will bind ScrollWheelDown (plus modifiers below) to the macro created."] = "Belegt MausradRunterscrollen (plus gewähltem Modifikator) mit dem erstellten Macro." -- Needs review
L["Will bind ScrollWheelUp (plus modifiers below) to the macro created."] = "Belegt MausradHochscrollen (plus gewähltem Modifikator) mit dem erstellten Makro." -- Needs review
L["Will cancel all your auctions at or below the specified duration, including ones you didn't post with Auctioning."] = "Bricht alle deine Auktionen in oder unter der angegebenen Laufzeit ab, bricht auch solche ab die nicht mit Auctioning erstellt wurden." -- Needs review
L["Will cancel all your auctions, including ones which you didn't post with Auctioning."] = "Bricht alle deine Auktionen ab, bricht auch solche ab die nciht mit Auctioning erstellt wurden." -- Needs review
L["Will cancel all your auctions which match the specified filter, including ones which you didn't post with Auctioning."] = "Bricht alle deine Auktionen ab die dem angegeben Filter entsprechen ab, bricht auch solche ab die nicht mit Auctioning erstellt wurden." -- Needs review
L["Will cancel auctions even if they have a bid on them, you will take an additional gold cost if you cancel an auction with bid."] = "Bricht Auktionen ab, auch wenn bereits ein Gebot vorhanden ist. Es entstehen zusätzliche Kosten, wenn eine Auktion mit vorhandenem Gebot abgebrochen wird." -- Needs review
L["You do not have any players on your whitelist yet."] = "Es befinden sich derzeit keine Spieler auf Ihrer Whitelist."
L["Your auction has not been undercut."] = "Deine Auktion wurde nicht unterboten."
L["Your Buyout"] = "Dein Sofortkauf" -- Needs review
L["You've been undercut."] = "Du wurdest unterboten. >:(" -- Needs review
+287
View File
@@ -0,0 +1,287 @@
-- ------------------------------------------------------------------------------ --
-- TradeSkillMaster_Auctioning --
-- http://www.curse.com/addons/wow/tradeskillmaster_auctioning --
-- --
-- A TradeSkillMaster Addon (http://tradeskillmaster.com) --
-- All Rights Reserved* - Detailed license information included with addon. --
-- ------------------------------------------------------------------------------ --
-- TradeSkillMaster_Auctioning Locale - enUS
-- Please use the localization app on CurseForge to update this
-- http://wow.curseforge.com/addons/TradeSkill-Master/localization/
local L = LibStub("AceLocale-3.0"):NewLocale("TradeSkillMaster_Auctioning", "enUS", true)
if not L then return end
L["%s item(s) to buy/cancel"] = true
L["'%s' has an Auctioning operation of '%s' which no longer exists. Auctioning will ignore this group until this is fixed."] = true
L["'%s' has an Auctioning operation of '%s' which no longer exists."] = true
L["2 to 12 hrs"] = true
L["30min to 2hrs"] = true
L["<none>"] = true
L["Above max price. Posting at min price."] = true
L["Above max price. Posting at max price."] = true
L["Above max price. Posting at normal price."] = true
L["Add a new player to your whitelist."] = true
L["Add player"] = true
L["Any auctions at or below the selected duration will be ignored. Selecting \"<none>\" will cause no auctions to be ignored based on duration."] = true
L["At above max price and not undercut."] = true
L["At normal price and not undercut."] = true
L["Auction Buyout (Stack Price):"] = true
L["Auction Buyout"] = true
L["Auction Price Settings"] = true
L["Auction Settings"] = true
L["Auction has been bid on."] = true
L["Auction not found. Skipped."] = true
L["Auctioning could not find %s in your bags so has skipped posting it. Running the scan again should resolve this issue."] = true
L["Auctioning Prices:"] = true
L["Auctioning operations contain settings for posting, canceling, and resetting items in a group. Type the name of the new operation into the box below and hit 'enter' to create a new Crafting operation."] = true
L["Below min price. Posting at min price."] = true
L["Below min price. Posting at max price."] = true
L["Below min price. Posting at normal price."] = true
L["Bid percent"] = true
L["Cancel All Auctions"] = true
L["Cancel Auctions with Bids"] = true
L["Cancel Filter:"] = true
L["Cancel Low Duration"] = true
L["Cancel Scan Finished"] = true
L["Cancel Settings"] = true
L["Cancel Undercut Auctions"] = true
L["Cancel to Repost Higher"] = true
L["Cancel"] = true
L["Canceling %d / %d"] = true
L["Canceling all auctions."] = true
L["Canceling auction which you've undercut."] = true
L["Canceling to repost at higher price."] = true
L["Canceling to repost at reset price."] = true
L["Canceling to repost higher."] = true
L["Canceling undercut auctions and to repost higher."] = true
L["Canceling undercut auctions."] = true
L["Cheapest auction below min price."] = true
L["Click to show auctions for this item."] = true
L["Confirming %d / %d"] = true
L["Create Macro and Bind ScrollWheel (with selected options)"] = true
L["Currently Owned:"] = true
L["Default Operation Tab"] = true
L["Delete"] = true
L["Did not cancel %s because your cancel to repost threshold (%s) is invalid. Check your settings."] = true
L["Did not cancel %s because your maximum price (%s) is invalid. Check your settings."] = true
L["Did not cancel %s because your maximum price (%s) is lower than your minimum price (%s). Check your settings."] = true
L["Did not cancel %s because your minimum price (%s) is invalid. Check your settings."] = true
L["Did not cancel %s because your normal price (%s) is invalid. Check your settings."] = true
L["Did not cancel %s because your normal price (%s) is lower than your minimum price (%s). Check your settings."] = true
L["Did not cancel %s because your undercut (%s) is invalid. Check your settings."] = true
L["Did not post %s because your maximum price (%s) is invalid. Check your settings."] = true
L["Did not post %s because your maximum price (%s) is lower than your minimum price (%s). Check your settings."] = true
L["Did not post %s because your minimum price (%s) is invalid. Check your settings."] = true
L["Did not post %s because your normal price (%s) is invalid. Check your settings."] = true
L["Did not post %s because your normal price (%s) is lower than your minimum price (%s). Check your settings."] = true
L["Did not post %s because your undercut (%s) is invalid. Check your settings."] = true
L["Did not reset %s because your maximum price (%s) is invalid. Check your settings."] = true
L["Did not reset %s because your maximum price (%s) is lower than your minimum price (%s). Check your settings."] = true
L["Did not reset %s because your minimum price (%s) is invalid. Check your settings."] = true
L["Did not reset %s because your normal price (%s) is invalid. Check your settings."] = true
L["Did not reset %s because your normal price (%s) is lower than your minimum price (%s). Check your settings."] = true
L["Did not reset %s because your reset max cost (%s) is invalid. Check your settings."] = true
L["Did not reset %s because your reset max item cost (%s) is invalid. Check your settings."] = true
L["Did not reset %s because your reset min profit (%s) is invalid. Check your settings."] = true
L["Did not reset %s because your reset resolution (%s) is invalid. Check your settings."] = true
L["Did not reset %s because your undercut (%s) is invalid. Check your settings."] = true
L["Disable Invalid Price Warnings"] = true
L["Don't Post Items"] = true
L["Done Canceling"] = true
L["Done Canceling"] = true
L["Done Posting"] = true
L["Done Posting\n\nTotal value of your auctions: %s\nIncoming Gold: %s"] = true
L["Done Scanning!\n\nCould potentially reset %d items for %s profit."] = true
L["Done Scanning"] = true
L["Down"] = true
L["Duration"] = true
L["Edit Post Price"] = true
L["Enable Reset Scan"] = true
L["Enable Sounds"] = true
L["Error creating operation. Operation with name '%s' already exists."] = true
L["General Operation Options"] = true
L["General Options"] = true
L["General Reset Settings"] = true
L["General Settings"] = true
L["General"] = true
L["Give the new operation a name. A descriptive name will help you find this operation later."] = true
L["Help"] = true
L["How long auctions should be up for."] = true
L["How many auctions at the lowest price tier can be up at any one time. Setting this to 0 disables posting for any groups this operation is applied to."] = true
L["How many items should be in a single auction, 20 will mean they are posted in stacks of 20."] = true
L["How many items you want to keep in your bags and not have Auctioning post."] = true
L["How much to undercut other auctions by. Format is in \"#g#s#c\". For example, \"50g30s\" means 50 gold, 30 silver, and no copper."] = true
L["If an item can't be posted for at least this amount higher than its current value, it won't be canceled to repost higher."] = true
L["If checked, Auctioning will ignore all auctions that are posted at a different stack size than your auctions. For example, if there are stacks of 1, 5, and 20 up and you're posting in stacks of 1, it'll ignore all stacks of 5 and 20."] = true
L["If checked, TSM will not print out a chat message when you have an invalid price for an item. However, it will still show as invalid in the log."] = true
L["If checked, a cancel scan will cancel any auctions which can be reposted for a higher price."] = true
L["If checked, a cancel scan will cancel any auctions which have been undercut and are still above your minimum price."] = true
L["If checked, groups which the opperation applies to will be included in a reset scan."] = true
L["If checked, the minimum, normal and maximum prices of the first operation for the item will be shown in tooltips."] = true
L["If checked, whenever you post an item at its normal price, the buyout will be rounded up to the nearest gold."] = true
L["If enabled, instead of not posting when a whitelisted player has an auction posted, Auctioning will match their price."] = true
L["If you don't have enough items for a full post, it will post with what you have."] = true
L["Ignore Auctions Below Minimum"] = true
L["Ignore Low Duration Auctions"] = true
L["Info"] = true
L["Invalid scan data for item %s. Skipping this item."] = true
L["Invalid seller data returned by server."] = true
L["Item"] = true
L["Item/Group is invalid."] = true
L["Keep Posted"] = true
L["Keep Quantity"] = true
L["Keeping undercut auctions posted."] = true
L["Log Info:"] = true
L["Low Duration"] = true
L["Lowest Buyout"] = true
L["Lowest Buyout:"] = true
L["Lowest auction by whitelisted player."] = true
L["Macro Help"] = true
L["Macro created and keybinding set!"] = true
L["Management"] = true
L["Match Stack Size"] = true
L["Match Whitelist Players"] = true
L["Max Cost Per Item"] = true
L["Max Cost:"] = true
L["Max Inventory Quantity"] = true
L["Max Price Per:"] = true
L["Max Quantity to Buy"] = true
L["Max Quantity:"] = true
L["Max Reset Cost"] = true
L["Maximum Price"] = true
L["Maximum Price:"] = true
L["Maximum amount already posted."] = true
L["Min (%s), Normal (%s), Max (%s)"] = true
L["Min Profit:"] = true
L["Min Reset Profit"] = true
L["Minimum Price"] = true
L["Minimum Price:"] = true
L["Modifiers:"] = true
L["Move AH Shortfall To Bags"] = true
L["Move Group To Bags"] = true
L["Move Group To Bank"] = true
L["Move Non Group Items to Bank"] = true
L["Move Post Cap To Bags"] = true
L["Must wait for scan to finish before starting to reset."] = true
L["New Operation"] = true
L["No Items to Reset"] = true
L["No posting."] = true
L["None"] = true
L["Normal Price"] = true
L["Normal Price:"] = true
L["Not canceling auction at reset price."] = true
L["Not canceling auction below min price."] = true
L["Not canceling."] = true
L["Not enough items in bags."] = true
L["Not resetting."] = true
L["Nothing to Move"] = true
L["Operation Name"] = true
L["Operation"] = true
L["Operations"] = true
L["Options"] = true
L["Other Auctioning Searches"] = true
L["Percentage of the buyout as bid, if you set this to 90% then a 100g buyout will have a 90g bid."] = true
L["Player name"] = true
L["Play the selected sound when a post / cancel scan is complete and items are ready to be posted / canceled (the gray bar is all the way across).Select None to disable sounds"] = true
L["Please don't move items around in your bags while a post scan is running! The item was skipped to avoid an incorrect item being posted."] = true
L["Post Cap"] = true
L["Post Scan Finished"] = true
L["Post Settings"] = true
L["Post at Maximum Price"] = true
L["Post at Minimum Price"] = true
L["Post at Normal Price"] = true
L["Post"] = true
L["Posted at whitelisted player's price."] = true
L["Posting %d / %d"] = true
L["Posting %d stack(s) of %d for %d hours."] = true
L["Posting Price Settings"] = true
L["Posting at normal price."] = true
L["Posting at whitelisted player's price."] = true
L["Posting at your current price."] = true
L["Preparing Filter %d / %d"] = true
L["Preparing Filters..."] = true
L["Preparing to Move"] = true
L["Price Resolution"] = true
L["Price to post at if there are none of an item currently on the AH."] = true
L["Processing Items..."] = true
L["Profit Per Item"] = true
L["Profit:"] = true
L["Quantity (Yours)"] = true
L["Relationships"] = true
L["Repost Higher Threshold"] = true
L["Reset Scan Finished"] = true
L["Reset Settings"] = true
L["Reset"] = true
L["Resetting enabled."] = true
L["Restart"] = true
L["Return to Summary"] = true
L["Right-Click to add %s to your friends list."] = true
L["Round Normal Price"] = true
L["Running Scan..."] = true
L["Save New Price"] = true
L["Scan Complete!"] = true
L["Scanning %d / %d (Page %d / %d)"] = true
L["Scanning %d / %d"] = true
L["ScrollWheel Direction (both recommended):"] = true
L["Select a duration in this dropdown and click on the button below to cancel all auctions at or below this duration."] = true
L["Select the groups which you would like to include in the scan."] = true
L["Seller name of lowest auction for item %s was not returned from server. Skipping this item."] = true
L["Seller"] = true
L["Shift-Right-Click to show the options for this item's Auctioning group."] = true
L["Shift-Right-Click to show the options for this operation.".."|r"] = true
L["Show All Auctions"] = true
L["Show Auctioning values in Tooltip"] = true
L["Show Item Auctions"] = true
L["Show Log"] = true
L["Skip"] = true
L["Stack Size"] = true
L["Start Cancel Scan"] = true
L["Start Post Scan"] = true
L["Start Reset Scan"] = true
L["Starting Scan..."] = true
L["Stop"] = true
L["Target Price"] = true
L["Target Price:"] = true
L["Test Selected Sound"] = true
L["The filter cannot be empty. If you'd like to cancel all auctions, use the 'Cancel All Auctions' button."] = true
L["The lowest price you want an item to be posted for. Auctioning will not undercut auctions below this price."] = true
L["The maximum amount that you want to spend in order to reset a particular item. This is the total amount, not a per-item amount."] = true
L["The maximum price you want an item to be posted for. Auctioning will not undercut auctions above this price."] = true
L["The minimum profit you would want to make from doing a reset. This is a per-item price where profit is the price you reset to minus the average price you spent per item."] = true
L["The player \"%s\" is already on your whitelist."] = true
L["There are two ways of making clicking the Post / Cancel Auction button easier. You can put %s and %s in a macro (on separate lines), or use the utility below to have a macro automatically made and bound to scrollwheel for you."] = true
L["This determines what size range of prices should be considered a single price point for the reset scan. For example, if this is set to 1s, an auction at 20g50s20c and an auction at 20g49s45c will both be considered to be the same price level."] = true
L["This dropdown determines the default tab when you visit an operation."] = true
L["This dropdown determines what Auctioning will do when the market for an item goes above your maximum price. You can post the items at one of your configured prices."] = true
L["This dropdown determines what Auctioning will do when the market for an item goes below your minimum price. You can not post the items, post at one of your configured prices, or have Auctioning ignore all the auctions below your minimum price (and likely undercut the lowest auction above your mimimum price)."] = true
L["This is the maximum amount you want to pay for a single item when reseting."] = true
L["This is the maximum quantity of an item you want to buy in a single reset scan."] = true
L["This is the maximum quantity of an item you want to have in your inventory after a reset scan."] = true
L["This item does not have any seller data."] = true
L["This number of undercut auctions will be kept on the auction house (not canceled) when doing a cancel scan."] = true
L["This number of undercut auctions will be kept on the auction house (not canceled) when doing a cancel scan."] = true
L["Total Cost"] = true
L["Under 30min"] = true
L["Undercut Amount"] = true
L["Undercut by whitelisted player."] = true
L["Undercutting competition."] = true
L["Up"] = true
L["Use Stack Size as Cap"] = true
L["WARNING: You minimum price for %s is below its vendorsell price (with AH cut taken into account). Consider raising your minimum price, or vendoring the item."] = true
L["When Above Maximum"] = true
L["When Below Minimum"] = true
L["Whitelist"] = true
L["Whitelists allow you to set other players besides you and your alts that you do not want to undercut; however, if somebody on your whitelist matches your buyout but lists a lower bid it will still consider them undercutting."] = true
L["Will bind ScrollWheelDown (plus modifiers below) to the macro created."] = true
L["Will bind ScrollWheelUp (plus modifiers below) to the macro created."] = true
L["Will cancel all your auctions at or below the specified duration, including ones you didn't post with Auctioning."] = true
L["Will cancel all your auctions which match the specified filter, including ones which you didn't post with Auctioning."] = true
L["Will cancel all your auctions, including ones which you didn't post with Auctioning."] = true
L["Will cancel auctions even if they have a bid on them, you will take an additional gold cost if you cancel an auction with bid."] = true
L["You do not have any players on your whitelist yet."] = true
L["You've been undercut."] = true
L["Your Buyout"] = true
L["Your auction has not been undercut."] = true
L["auctions of|r %s"] = true
+268
View File
@@ -0,0 +1,268 @@
-- ------------------------------------------------------------------------------ --
-- TradeSkillMaster_Auctioning --
-- http://www.curse.com/addons/wow/tradeskillmaster_auctioning --
-- --
-- A TradeSkillMaster Addon (http://tradeskillmaster.com) --
-- All Rights Reserved* - Detailed license information included with addon. --
-- ------------------------------------------------------------------------------ --
-- TradeSkillMaster_Auctioning Locale - esES
-- Please use the localization app on CurseForge to update this
-- http://wow.curseforge.com/addons/TradeSkillMaster_Auctioning/localization/
local L = LibStub("AceLocale-3.0"):NewLocale("TradeSkillMaster_Auctioning", "esES")
if not L then return end
-- L["2 to 12 hrs"] = ""
-- L["30min to 2hrs"] = ""
L["Add a new player to your whitelist."] = "Añadir un nuevo jugador a su lista blanca." -- Needs review
L["Add player"] = "Añadir jugador." -- Needs review
-- L["Any auctions at or below the selected duration will be ignored. Selecting \"<none>\" will cause no auctions to be ignored based on duration."] = ""
-- L["At normal price and not undercut."] = ""
-- L["Auction Buyout"] = ""
-- L["Auction Buyout (Stack Price):"] = ""
-- L["Auction has been bid on."] = ""
-- L["Auctioning operations contain settings for posting, canceling, and resetting items in a group. Type the name of the new operation into the box below and hit 'enter' to create a new Crafting operation."] = ""
-- L["Auctioning Prices:"] = ""
-- L["Auction not found. Skipped."] = ""
-- L["Auction Price Settings"] = ""
-- L["Auction Settings"] = ""
-- L["auctions of|r %s"] = ""
-- L["Below min price, posting at reset price."] = ""
-- L["Bid percent"] = ""
-- L["Cancel"] = ""
-- L["Cancel All Auctions"] = ""
-- L["Cancel Auctions with Bids"] = ""
-- L["Cancel Filter:"] = ""
-- L["Canceling all auctions."] = ""
-- L["Canceling auction which you've undercut."] = ""
-- L["Canceling %d / %d"] = ""
-- L["Canceling to repost at higher price."] = ""
-- L["Canceling to repost at reset price."] = ""
-- L["Canceling to repost higher."] = ""
-- L["Canceling undercut auctions."] = ""
-- L["Canceling undercut auctions and to repost higher."] = ""
-- L["Cancel Low Duration"] = ""
-- L["Cancel Scan Finished"] = ""
-- L["Cancel Settings"] = ""
-- L["Cancel to Repost Higher"] = ""
-- L["Cancel Undercut Auctions"] = ""
-- L["Cheapest auction below min price."] = ""
-- L["Click to show auctions for this item."] = ""
-- L["Confirming %d / %d"] = ""
-- L["Create Macro and Bind ScrollWheel (with selected options)"] = ""
-- L["Currently Owned:"] = ""
-- L["Default Operation Tab"] = ""
-- L["Delete"] = ""
-- L["Did not cancel %s because your cancel to repost threshold (%s) is invalid. Check your settings."] = ""
-- L["Did not cancel %s because your maximum price (%s) is invalid. Check your settings."] = ""
-- L["Did not cancel %s because your maximum price (%s) is lower than your minimum price (%s). Check your settings."] = ""
-- L["Did not cancel %s because your minimum price (%s) is invalid. Check your settings."] = ""
-- L["Did not cancel %s because your normal price (%s) is invalid. Check your settings."] = ""
-- L["Did not cancel %s because your normal price (%s) is lower than your minimum price (%s). Check your settings."] = ""
-- L["Did not post %s because your maximum price (%s) is invalid. Check your settings."] = ""
-- L["Did not post %s because your maximum price (%s) is lower than your minimum price (%s). Check your settings."] = ""
-- L["Did not post %s because your minimum price (%s) is invalid. Check your settings."] = ""
-- L["Did not post %s because your normal price (%s) is invalid. Check your settings."] = ""
-- L["Did not post %s because your normal price (%s) is lower than your minimum price (%s). Check your settings."] = ""
-- L["Did not reset %s because your maximum price (%s) is invalid. Check your settings."] = ""
-- L["Did not reset %s because your maximum price (%s) is lower than your minimum price (%s). Check your settings."] = ""
-- L["Did not reset %s because your minimum price (%s) is invalid. Check your settings."] = ""
-- L["Did not reset %s because your normal price (%s) is invalid. Check your settings."] = ""
-- L["Did not reset %s because your normal price (%s) is lower than your minimum price (%s). Check your settings."] = ""
-- L["Did not reset %s because your reset max cost (%s) is invalid. Check your settings."] = ""
-- L["Did not reset %s because your reset max item cost (%s) is invalid. Check your settings."] = ""
-- L["Did not reset %s because your reset min profit (%s) is invalid. Check your settings."] = ""
-- L["Did not reset %s because your reset resolution (%s) is invalid. Check your settings."] = ""
-- L["Disable Invalid Price Warnings"] = ""
-- L["Done Canceling"] = ""
-- L["Done Posting"] = ""
--[==[ L[ [=[Done Posting
Total value of your auctions: %s
Incoming Gold: %s]=] ] = "" ]==]
-- L["Done Scanning"] = ""
--[==[ L[ [=[Done Scanning!
Could potentially reset %d items for %s profit.]=] ] = "" ]==]
-- L["Don't Post Items"] = ""
-- L["Down"] = ""
-- L["Duration"] = ""
-- L["Edit Post Price"] = ""
-- L["Enable Reset Scan"] = ""
-- L["Enable Sounds"] = ""
-- L["Error creating operation. Operation with name '%s' already exists."] = ""
-- L["General"] = ""
-- L["General Operation Options"] = ""
-- L["General Options"] = ""
-- L["General Reset Settings"] = ""
-- L["General Settings"] = ""
-- L["Give the new operation a name. A descriptive name will help you find this operation later."] = ""
-- L["Help"] = ""
-- L["How long auctions should be up for."] = ""
-- L["How many auctions at the lowest price tier can be up at any one time. Setting this to 0 disables posting for any groups this operation is applied to."] = ""
-- L["How many items should be in a single auction, 20 will mean they are posted in stacks of 20."] = ""
-- L["How much to undercut other auctions by. Format is in \"#g#s#c\". For example, \"50g30s\" means 50 gold, 30 silver, and no copper."] = ""
-- L["If an item can't be posted for at least this amount higher than its current value, it won't be canceled to repost higher."] = ""
-- L["If checked, a cancel scan will cancel any auctions which can be reposted for a higher price."] = ""
-- L["If checked, a cancel scan will cancel any auctions which have been undercut and are still above your threshold."] = ""
-- L["If checked, Auctioning will ignore all auctions that are posted at a different stack size than your auctions. For example, if there are stacks of 1, 5, and 20 up and you're posting in stacks of 1, it'll ignore all stacks of 5 and 20."] = ""
-- L["If checked, groups which the opperation applies to will be included in a reset scan."] = ""
-- L["If checked, the minimum, normal and maximum prices of the first operation for the item will be shown in tooltips."] = ""
-- L["If checked, TSM will not print out a chat message when you have an invalid price for an item. However, it will still show as invalid in the log."] = ""
-- L["If checked, whenever you post an item at its normal price, the buyout will be rounded up to the nearest gold."] = ""
-- L["If enabled, instead of not posting when a whitelisted player has an auction posted, Auctioning will match their price."] = ""
-- L["If you don't have enough items for a full post, it will post with what you have."] = ""
-- L["Ignore Low Duration Auctions"] = ""
-- L["Info"] = ""
-- L["Invalid scan data for item %s. Skipping this item."] = ""
-- L["Invalid seller data returned by server."] = ""
-- L["Item"] = ""
-- L["Item/Group is invalid."] = ""
-- L["Keeping undercut auctions posted."] = ""
-- L["Keep Posted"] = ""
-- L["Log Info:"] = ""
-- L["Low Duration"] = ""
-- L["Lowest auction by whitelisted player."] = ""
-- L["Lowest Buyout"] = ""
-- L["Lowest Buyout:"] = ""
-- L["Macro created and keybinding set!"] = ""
-- L["Macro Help"] = ""
-- L["Match Stack Size"] = ""
-- L["Match Whitelist Players"] = ""
-- L["Max Cost:"] = ""
-- L["Max Cost Per Item"] = ""
-- L["Maximum amount already posted."] = ""
-- L["Maximum Price"] = ""
-- L["Maximum Price:"] = ""
-- L["Max Price Per:"] = ""
-- L["Max Quantity:"] = ""
-- L["Max Quantity to Buy"] = ""
-- L["Max Reset Cost"] = ""
-- L["Minimum Price:"] = ""
-- L["Minimum Price (aka Threshold)"] = ""
-- L["Min Profit:"] = ""
-- L["Min Reset Profit"] = ""
-- L["Min (%s), Normal (%s), Max (%s)"] = ""
-- L["Modifiers:"] = ""
-- L["Move AH Shortfall To Bags"] = ""
-- L["Move Group To Bags"] = ""
-- L["Move Group To Bank"] = ""
-- L["Move Non Group Items to Bank"] = ""
-- L["Move Post Cap To Bags"] = ""
-- L["Must wait for scan to finish before starting to reset."] = ""
-- L["New Operation"] = ""
-- L["No Items to Reset"] = ""
-- L["<none>"] = ""
-- L["No posting."] = ""
-- L["Normal Price:"] = ""
-- L["Normal Price (aka Fallback)"] = ""
-- L["Not canceling."] = ""
-- L["Not canceling auction at reset price."] = ""
-- L["Not canceling auction below min price."] = ""
-- L["Not enough items in bags."] = ""
-- L["NOTE: You can right click on any of the price settings below to show a window which will help with more advanced price settings such as using a % of another price source."] = ""
-- L["Nothing to Move"] = ""
-- L["Not resetting."] = ""
-- L["Operation"] = ""
-- L["Operation Name"] = ""
-- L["Operations"] = ""
-- L["Options"] = ""
-- L["Other Auctioning Searches"] = ""
-- L["Percentage of the buyout as bid, if you set this to 90% then a 100g buyout will have a 90g bid."] = ""
-- L["Player name"] = ""
-- L["Plays the ready check sound when a post / cancel scan is complete and items are ready to be posting / canceled (the gray bar is all the way across)."] = ""
-- L["Please don't move items around in your bags while a post scan is running! The item was skipped to avoid an incorrect item being posted."] = ""
-- L["Post"] = ""
-- L["Post at Maximum Price"] = ""
-- L["Post at Minimum Price"] = ""
-- L["Post at Normal Price"] = ""
-- L["Post Cap"] = ""
-- L["Posted at whitelisted player's price."] = ""
-- L["Posting at normal price."] = ""
-- L["Posting at whitelisted player's price."] = ""
-- L["Posting at your current price."] = ""
-- L["Posting %d / %d"] = ""
-- L["Posting %d stack(s) of %d for %d hours."] = ""
-- L["Posting Price Settings"] = ""
-- L["Post Scan Finished"] = ""
-- L["Post Settings"] = ""
-- L["Preparing Filter %d / %d"] = ""
-- L["Preparing Filters..."] = ""
-- L["Preparing to Move"] = ""
-- L["Price Resolution"] = ""
-- L["Price to post at if there are no auctions up under your maximum price. This includes the case where there's none of an item on the AH."] = ""
-- L["Processing Items..."] = ""
-- L["Profit:"] = ""
-- L["Profit Per Item"] = ""
-- L["Quantity (Yours)"] = ""
-- L["Relationships"] = ""
-- L["Repost Higher Threshold"] = ""
-- L["Reset"] = ""
-- L["Reset Scan Finished"] = ""
-- L["Reset Settings"] = ""
-- L["Resetting enabled."] = ""
-- L["Restart"] = ""
-- L["Return to Summary"] = ""
-- L["Right-Click to add %s to your friends list."] = ""
-- L["Round Normal Price"] = ""
-- L["Running Scan..."] = ""
-- L["Save New Price"] = ""
-- L["Scan Complete!"] = ""
-- L["Scanning %d / %d"] = ""
-- L["Scanning %d / %d (Page %d / %d)"] = ""
-- 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 scan."] = ""
-- L["Seller"] = ""
-- L["Seller name of lowest auction for item %s was not returned from server. Skipping this item."] = ""
-- L["'%s' has an Auctioning operation of '%s' which no longer exists."] = ""
-- L["'%s' has an Auctioning operation of '%s' which no longer exists. Auctioning will ignore this group until this is fixed."] = ""
-- L["Shift-Right-Click to show the options for this item's Auctioning group."] = ""
-- L["Shift-Right-Click to show the options for this operation.|r"] = ""
-- L["Show All Auctions"] = ""
-- L["Show Auctioning values in Tooltip"] = ""
-- L["Show Item Auctions"] = ""
-- L["Show Log"] = ""
-- L["%s item(s) to buy/cancel"] = ""
-- L["Skip"] = ""
-- L["Stack Size"] = ""
-- L["Start Cancel Scan"] = ""
-- L["Starting Scan..."] = ""
-- L["Start Post Scan"] = ""
-- L["Start Reset Scan"] = ""
-- L["Stop"] = ""
-- L["Target Price"] = ""
-- L["Target Price:"] = ""
-- L["The filter cannot be empty. If you'd like to cancel all auctions, use the 'Cancel All Auctions' button."] = ""
-- L["The lowest price you want an item to be posted for. Auctioning will not undercut auctions below this price."] = ""
-- L["The maximum amount that you want to spend in order to reset a particular item. This is the total amount, not a per-item amount."] = ""
-- L["The maximum price you want an item to be posted for. Auctioning will not undercut auctions above this price."] = ""
-- L["The minimum profit you would want to make from doing a reset. This is a per-item price where profit is the price you reset to minus the average price you spent per item."] = ""
-- L["There are two ways of making clicking the Post / Cancel Auction button easier. You can put %s and %s in a macro (on separate lines), or use the utility below to have a macro automatically made and bound to scrollwheel for you."] = ""
-- L["This determines what size range of prices should be considered a single price point for the reset scan. For example, if this is set to 1s, an auction at 20g50s20c and an auction at 20g49s45c will both be considered to be the same price level."] = ""
-- L["This dropdown determines the default tab when you visit an operation."] = ""
-- L["This dropdown determines what Auctioning will do when the market for an item goes below your minimum price. You can either not post the items or post at one of your configured prices."] = ""
-- L["This is the maximum amount you want to pay for a single item when reseting."] = ""
-- L["This item does not have any seller data."] = ""
-- L["This number of undercut auctions will be kept on the auction house (not canceled) when doing a cancel scan."] = ""
-- L["Total Cost"] = ""
-- L["Under 30min"] = ""
-- L["Undercut Amount"] = ""
-- L["Undercut by whitelisted player."] = ""
-- L["Undercutting competition."] = ""
-- L["Up"] = ""
-- L["Use Stack Size as Cap"] = ""
-- L["When Below Threshold (aka Reset Method)"] = ""
-- L["Whitelist"] = ""
-- L["Whitelists allow you to set other players besides you and your alts that you do not want to undercut; however, if somebody on your whitelist matches your buyout but lists a lower bid it will still consider them undercutting."] = ""
-- L["Will bind ScrollWheelDown (plus modifiers below) to the macro created."] = ""
-- L["Will bind ScrollWheelUp (plus modifiers below) to the macro created."] = ""
-- L["Will cancel all your auctions at or below the specified duration, including ones you didn't post with Auctioning."] = ""
-- L["Will cancel all your auctions, including ones which you didn't post with Auctioning."] = ""
-- L["Will cancel all your auctions which match the specified filter, including ones which you didn't post with Auctioning."] = ""
-- L["Will cancel auctions even if they have a bid on them, you will take an additional gold cost if you cancel an auction with bid."] = ""
-- L["You do not have any players on your whitelist yet."] = ""
-- L["Your auction has not been undercut."] = ""
-- L["Your Buyout"] = ""
-- L["You've been undercut."] = ""
+268
View File
@@ -0,0 +1,268 @@
-- ------------------------------------------------------------------------------ --
-- TradeSkillMaster_Auctioning --
-- http://www.curse.com/addons/wow/tradeskillmaster_auctioning --
-- --
-- A TradeSkillMaster Addon (http://tradeskillmaster.com) --
-- All Rights Reserved* - Detailed license information included with addon. --
-- ------------------------------------------------------------------------------ --
-- TradeSkillMaster_Auctioning Locale - esMX
-- Please use the localization app on CurseForge to update this
-- http://wow.curseforge.com/addons/TradeSkillMaster_Auctioning/localization/
local L = LibStub("AceLocale-3.0"):NewLocale("TradeSkillMaster_Auctioning", "esMX")
if not L then return end
-- L["2 to 12 hrs"] = ""
-- L["30min to 2hrs"] = ""
L["Add a new player to your whitelist."] = "Añadir un nuevo jugador a tu lista blanca." -- Needs review
L["Add player"] = "Añadir un jugador." -- Needs review
-- L["Any auctions at or below the selected duration will be ignored. Selecting \"<none>\" will cause no auctions to be ignored based on duration."] = ""
-- L["At normal price and not undercut."] = ""
-- L["Auction Buyout"] = ""
-- L["Auction Buyout (Stack Price):"] = ""
-- L["Auction has been bid on."] = ""
-- L["Auctioning operations contain settings for posting, canceling, and resetting items in a group. Type the name of the new operation into the box below and hit 'enter' to create a new Crafting operation."] = ""
-- L["Auctioning Prices:"] = ""
-- L["Auction not found. Skipped."] = ""
-- L["Auction Price Settings"] = ""
-- L["Auction Settings"] = ""
-- L["auctions of|r %s"] = ""
-- L["Below min price, posting at reset price."] = ""
L["Bid percent"] = "Porcentaje de puja." -- Needs review
L["Cancel"] = "Cancelar" -- Needs review
-- L["Cancel All Auctions"] = ""
-- L["Cancel Auctions with Bids"] = ""
-- L["Cancel Filter:"] = ""
-- L["Canceling all auctions."] = ""
-- L["Canceling auction which you've undercut."] = ""
-- L["Canceling %d / %d"] = ""
-- L["Canceling to repost at higher price."] = ""
-- L["Canceling to repost at reset price."] = ""
-- L["Canceling to repost higher."] = ""
-- L["Canceling undercut auctions."] = ""
-- L["Canceling undercut auctions and to repost higher."] = ""
-- L["Cancel Low Duration"] = ""
-- L["Cancel Scan Finished"] = ""
-- L["Cancel Settings"] = ""
-- L["Cancel to Repost Higher"] = ""
-- L["Cancel Undercut Auctions"] = ""
-- L["Cheapest auction below min price."] = ""
-- L["Click to show auctions for this item."] = ""
-- L["Confirming %d / %d"] = ""
L["Create Macro and Bind ScrollWheel (with selected options)"] = "Crear un Macro y ligar la rueda (con las opciones seleccionadas)" -- Needs review
-- L["Currently Owned:"] = ""
-- L["Default Operation Tab"] = ""
L["Delete"] = "Borrar" -- Needs review
-- L["Did not cancel %s because your cancel to repost threshold (%s) is invalid. Check your settings."] = ""
-- L["Did not cancel %s because your maximum price (%s) is invalid. Check your settings."] = ""
-- L["Did not cancel %s because your maximum price (%s) is lower than your minimum price (%s). Check your settings."] = ""
-- L["Did not cancel %s because your minimum price (%s) is invalid. Check your settings."] = ""
-- L["Did not cancel %s because your normal price (%s) is invalid. Check your settings."] = ""
-- L["Did not cancel %s because your normal price (%s) is lower than your minimum price (%s). Check your settings."] = ""
-- L["Did not post %s because your maximum price (%s) is invalid. Check your settings."] = ""
-- L["Did not post %s because your maximum price (%s) is lower than your minimum price (%s). Check your settings."] = ""
-- L["Did not post %s because your minimum price (%s) is invalid. Check your settings."] = ""
-- L["Did not post %s because your normal price (%s) is invalid. Check your settings."] = ""
-- L["Did not post %s because your normal price (%s) is lower than your minimum price (%s). Check your settings."] = ""
-- L["Did not reset %s because your maximum price (%s) is invalid. Check your settings."] = ""
-- L["Did not reset %s because your maximum price (%s) is lower than your minimum price (%s). Check your settings."] = ""
-- L["Did not reset %s because your minimum price (%s) is invalid. Check your settings."] = ""
-- L["Did not reset %s because your normal price (%s) is invalid. Check your settings."] = ""
-- L["Did not reset %s because your normal price (%s) is lower than your minimum price (%s). Check your settings."] = ""
-- L["Did not reset %s because your reset max cost (%s) is invalid. Check your settings."] = ""
-- L["Did not reset %s because your reset max item cost (%s) is invalid. Check your settings."] = ""
-- L["Did not reset %s because your reset min profit (%s) is invalid. Check your settings."] = ""
-- L["Did not reset %s because your reset resolution (%s) is invalid. Check your settings."] = ""
-- L["Disable Invalid Price Warnings"] = ""
L["Done Canceling"] = "Cancelado terminado" -- Needs review
L["Done Posting"] = "Subastado terminado" -- Needs review
--[==[ L[ [=[Done Posting
Total value of your auctions: %s
Incoming Gold: %s]=] ] = "" ]==]
-- L["Done Scanning"] = ""
--[==[ L[ [=[Done Scanning!
Could potentially reset %d items for %s profit.]=] ] = "" ]==]
L["Don't Post Items"] = "No subastar objetos" -- Needs review
L["Down"] = "Abajo" -- Needs review
-- L["Duration"] = ""
-- L["Edit Post Price"] = ""
-- L["Enable Reset Scan"] = ""
-- L["Enable Sounds"] = ""
-- L["Error creating operation. Operation with name '%s' already exists."] = ""
L["General"] = "General" -- Needs review
-- L["General Operation Options"] = ""
-- L["General Options"] = ""
-- L["General Reset Settings"] = ""
L["General Settings"] = "Opciones Generales" -- Needs review
-- L["Give the new operation a name. A descriptive name will help you find this operation later."] = ""
L["Help"] = "Ayuda" -- Needs review
L["How long auctions should be up for."] = "Cuanto tiempo deberian estar las subastas." -- Needs review
-- L["How many auctions at the lowest price tier can be up at any one time. Setting this to 0 disables posting for any groups this operation is applied to."] = ""
L["How many items should be in a single auction, 20 will mean they are posted in stacks of 20."] = "Cuantos objetos deberian estar en una sola subasta, 20 significaria que seran subastados en pilas de 20." -- Needs review
-- L["How much to undercut other auctions by. Format is in \"#g#s#c\". For example, \"50g30s\" means 50 gold, 30 silver, and no copper."] = ""
-- L["If an item can't be posted for at least this amount higher than its current value, it won't be canceled to repost higher."] = ""
-- L["If checked, a cancel scan will cancel any auctions which can be reposted for a higher price."] = ""
-- L["If checked, a cancel scan will cancel any auctions which have been undercut and are still above your threshold."] = ""
-- L["If checked, Auctioning will ignore all auctions that are posted at a different stack size than your auctions. For example, if there are stacks of 1, 5, and 20 up and you're posting in stacks of 1, it'll ignore all stacks of 5 and 20."] = ""
-- L["If checked, groups which the opperation applies to will be included in a reset scan."] = ""
-- L["If checked, the minimum, normal and maximum prices of the first operation for the item will be shown in tooltips."] = ""
-- L["If checked, TSM will not print out a chat message when you have an invalid price for an item. However, it will still show as invalid in the log."] = ""
-- L["If checked, whenever you post an item at its normal price, the buyout will be rounded up to the nearest gold."] = ""
-- L["If enabled, instead of not posting when a whitelisted player has an auction posted, Auctioning will match their price."] = ""
L["If you don't have enough items for a full post, it will post with what you have."] = "Si no tienes suficientes objetos para subastar completo, subastaras con los que tengas." -- Needs review
-- L["Ignore Low Duration Auctions"] = ""
-- L["Info"] = ""
-- L["Invalid scan data for item %s. Skipping this item."] = ""
-- L["Invalid seller data returned by server."] = ""
-- L["Item"] = ""
-- L["Item/Group is invalid."] = ""
-- L["Keeping undercut auctions posted."] = ""
-- L["Keep Posted"] = ""
-- L["Log Info:"] = ""
-- L["Low Duration"] = ""
-- L["Lowest auction by whitelisted player."] = ""
-- L["Lowest Buyout"] = ""
-- L["Lowest Buyout:"] = ""
L["Macro created and keybinding set!"] = "¡Macro creada y ligada la tecla!" -- Needs review
L["Macro Help"] = "Ayuda de Macro" -- Needs review
-- L["Match Stack Size"] = ""
-- L["Match Whitelist Players"] = ""
-- L["Max Cost:"] = ""
-- L["Max Cost Per Item"] = ""
-- L["Maximum amount already posted."] = ""
-- L["Maximum Price"] = ""
-- L["Maximum Price:"] = ""
-- L["Max Price Per:"] = ""
-- L["Max Quantity:"] = ""
-- L["Max Quantity to Buy"] = ""
-- L["Max Reset Cost"] = ""
-- L["Minimum Price:"] = ""
-- L["Minimum Price (aka Threshold)"] = ""
-- L["Min Profit:"] = ""
-- L["Min Reset Profit"] = ""
-- L["Min (%s), Normal (%s), Max (%s)"] = ""
L["Modifiers:"] = "Modificadores:" -- Needs review
-- L["Move AH Shortfall To Bags"] = ""
-- L["Move Group To Bags"] = ""
-- L["Move Group To Bank"] = ""
-- L["Move Non Group Items to Bank"] = ""
-- L["Move Post Cap To Bags"] = ""
-- L["Must wait for scan to finish before starting to reset."] = ""
-- L["New Operation"] = ""
-- L["No Items to Reset"] = ""
-- L["<none>"] = ""
-- L["No posting."] = ""
-- L["Normal Price:"] = ""
-- L["Normal Price (aka Fallback)"] = ""
-- L["Not canceling."] = ""
-- L["Not canceling auction at reset price."] = ""
-- L["Not canceling auction below min price."] = ""
-- L["Not enough items in bags."] = ""
-- L["NOTE: You can right click on any of the price settings below to show a window which will help with more advanced price settings such as using a % of another price source."] = ""
-- L["Nothing to Move"] = ""
-- L["Not resetting."] = ""
-- L["Operation"] = ""
-- L["Operation Name"] = ""
-- L["Operations"] = ""
-- L["Options"] = ""
-- L["Other Auctioning Searches"] = ""
-- L["Percentage of the buyout as bid, if you set this to 90% then a 100g buyout will have a 90g bid."] = ""
-- L["Player name"] = ""
-- L["Plays the ready check sound when a post / cancel scan is complete and items are ready to be posting / canceled (the gray bar is all the way across)."] = ""
-- L["Please don't move items around in your bags while a post scan is running! The item was skipped to avoid an incorrect item being posted."] = ""
-- L["Post"] = ""
-- L["Post at Maximum Price"] = ""
-- L["Post at Minimum Price"] = ""
-- L["Post at Normal Price"] = ""
-- L["Post Cap"] = ""
-- L["Posted at whitelisted player's price."] = ""
-- L["Posting at normal price."] = ""
-- L["Posting at whitelisted player's price."] = ""
-- L["Posting at your current price."] = ""
-- L["Posting %d / %d"] = ""
-- L["Posting %d stack(s) of %d for %d hours."] = ""
-- L["Posting Price Settings"] = ""
-- L["Post Scan Finished"] = ""
-- L["Post Settings"] = ""
-- L["Preparing Filter %d / %d"] = ""
-- L["Preparing Filters..."] = ""
-- L["Preparing to Move"] = ""
-- L["Price Resolution"] = ""
-- L["Price to post at if there are no auctions up under your maximum price. This includes the case where there's none of an item on the AH."] = ""
-- L["Processing Items..."] = ""
-- L["Profit:"] = ""
-- L["Profit Per Item"] = ""
-- L["Quantity (Yours)"] = ""
-- L["Relationships"] = ""
-- L["Repost Higher Threshold"] = ""
-- L["Reset"] = ""
-- L["Reset Scan Finished"] = ""
-- L["Reset Settings"] = ""
-- L["Resetting enabled."] = ""
-- L["Restart"] = ""
-- L["Return to Summary"] = ""
-- L["Right-Click to add %s to your friends list."] = ""
-- L["Round Normal Price"] = ""
-- L["Running Scan..."] = ""
-- L["Save New Price"] = ""
-- L["Scan Complete!"] = ""
-- L["Scanning %d / %d"] = ""
-- L["Scanning %d / %d (Page %d / %d)"] = ""
-- 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 scan."] = ""
-- L["Seller"] = ""
-- L["Seller name of lowest auction for item %s was not returned from server. Skipping this item."] = ""
-- L["'%s' has an Auctioning operation of '%s' which no longer exists."] = ""
-- L["'%s' has an Auctioning operation of '%s' which no longer exists. Auctioning will ignore this group until this is fixed."] = ""
-- L["Shift-Right-Click to show the options for this item's Auctioning group."] = ""
-- L["Shift-Right-Click to show the options for this operation.|r"] = ""
-- L["Show All Auctions"] = ""
-- L["Show Auctioning values in Tooltip"] = ""
-- L["Show Item Auctions"] = ""
-- L["Show Log"] = ""
-- L["%s item(s) to buy/cancel"] = ""
-- L["Skip"] = ""
-- L["Stack Size"] = ""
-- L["Start Cancel Scan"] = ""
-- L["Starting Scan..."] = ""
-- L["Start Post Scan"] = ""
-- L["Start Reset Scan"] = ""
-- L["Stop"] = ""
-- L["Target Price"] = ""
-- L["Target Price:"] = ""
-- L["The filter cannot be empty. If you'd like to cancel all auctions, use the 'Cancel All Auctions' button."] = ""
-- L["The lowest price you want an item to be posted for. Auctioning will not undercut auctions below this price."] = ""
-- L["The maximum amount that you want to spend in order to reset a particular item. This is the total amount, not a per-item amount."] = ""
-- L["The maximum price you want an item to be posted for. Auctioning will not undercut auctions above this price."] = ""
-- L["The minimum profit you would want to make from doing a reset. This is a per-item price where profit is the price you reset to minus the average price you spent per item."] = ""
-- L["There are two ways of making clicking the Post / Cancel Auction button easier. You can put %s and %s in a macro (on separate lines), or use the utility below to have a macro automatically made and bound to scrollwheel for you."] = ""
-- L["This determines what size range of prices should be considered a single price point for the reset scan. For example, if this is set to 1s, an auction at 20g50s20c and an auction at 20g49s45c will both be considered to be the same price level."] = ""
-- L["This dropdown determines the default tab when you visit an operation."] = ""
-- L["This dropdown determines what Auctioning will do when the market for an item goes below your minimum price. You can either not post the items or post at one of your configured prices."] = ""
-- L["This is the maximum amount you want to pay for a single item when reseting."] = ""
-- L["This item does not have any seller data."] = ""
-- L["This number of undercut auctions will be kept on the auction house (not canceled) when doing a cancel scan."] = ""
-- L["Total Cost"] = ""
-- L["Under 30min"] = ""
-- L["Undercut Amount"] = ""
-- L["Undercut by whitelisted player."] = ""
-- L["Undercutting competition."] = ""
-- L["Up"] = ""
-- L["Use Stack Size as Cap"] = ""
-- L["When Below Threshold (aka Reset Method)"] = ""
-- L["Whitelist"] = ""
-- L["Whitelists allow you to set other players besides you and your alts that you do not want to undercut; however, if somebody on your whitelist matches your buyout but lists a lower bid it will still consider them undercutting."] = ""
-- L["Will bind ScrollWheelDown (plus modifiers below) to the macro created."] = ""
-- L["Will bind ScrollWheelUp (plus modifiers below) to the macro created."] = ""
-- L["Will cancel all your auctions at or below the specified duration, including ones you didn't post with Auctioning."] = ""
-- L["Will cancel all your auctions, including ones which you didn't post with Auctioning."] = ""
-- L["Will cancel all your auctions which match the specified filter, including ones which you didn't post with Auctioning."] = ""
-- L["Will cancel auctions even if they have a bid on them, you will take an additional gold cost if you cancel an auction with bid."] = ""
-- L["You do not have any players on your whitelist yet."] = ""
-- L["Your auction has not been undercut."] = ""
-- L["Your Buyout"] = ""
-- L["You've been undercut."] = ""
+268
View File
@@ -0,0 +1,268 @@
-- ------------------------------------------------------------------------------ --
-- TradeSkillMaster_Auctioning --
-- http://www.curse.com/addons/wow/tradeskillmaster_auctioning --
-- --
-- A TradeSkillMaster Addon (http://tradeskillmaster.com) --
-- All Rights Reserved* - Detailed license information included with addon. --
-- ------------------------------------------------------------------------------ --
-- TradeSkillMaster_Auctioning Locale - frFR
-- Please use the localization app on CurseForge to update this
-- http://wow.curseforge.com/addons/TradeSkillMaster_Auctioning/localization/
local L = LibStub("AceLocale-3.0"):NewLocale("TradeSkillMaster_Auctioning", "frFR")
if not L then return end
L["2 to 12 hrs"] = "2h à 12h" -- Needs review
L["30min to 2hrs"] = "30min à 2h" -- Needs review
L["Add a new player to your whitelist."] = "Ajouter un nouveau joueur à votre liste blanche"
L["Add player"] = "Ajouter un joueur"
L["Any auctions at or below the selected duration will be ignored. Selecting \"<none>\" will cause no auctions to be ignored based on duration."] = "Toutes les enchères à ou en dessous de la durée choisie seront ignorée. Choisir \"<aucune>\" n'ignorera aucune vente suivant la durée restante."
-- L["At normal price and not undercut."] = ""
-- L["Auction Buyout"] = ""
-- L["Auction Buyout (Stack Price):"] = ""
-- L["Auction has been bid on."] = ""
-- L["Auctioning operations contain settings for posting, canceling, and resetting items in a group. Type the name of the new operation into the box below and hit 'enter' to create a new Crafting operation."] = ""
-- L["Auctioning Prices:"] = ""
-- L["Auction not found. Skipped."] = ""
-- L["Auction Price Settings"] = ""
L["Auction Settings"] = "Paramètres de l'enchère" -- Needs review
-- L["auctions of|r %s"] = ""
-- L["Below min price, posting at reset price."] = ""
L["Bid percent"] = "Pourcentage du prix de départ"
L["Cancel"] = "Annuler"
L["Cancel All Auctions"] = "Annuler toutes les enchères" -- Needs review
-- L["Cancel Auctions with Bids"] = ""
-- L["Cancel Filter:"] = ""
L["Canceling all auctions."] = "Annulation de toutes les enchères."
-- L["Canceling auction which you've undercut."] = ""
-- L["Canceling %d / %d"] = ""
L["Canceling to repost at higher price."] = "Annulation pour reposter à un prix plus élevé."
-- L["Canceling to repost at reset price."] = ""
-- L["Canceling to repost higher."] = ""
-- L["Canceling undercut auctions."] = ""
-- L["Canceling undercut auctions and to repost higher."] = ""
-- L["Cancel Low Duration"] = ""
L["Cancel Scan Finished"] = "Annulation terminée"
-- L["Cancel Settings"] = ""
-- L["Cancel to Repost Higher"] = ""
-- L["Cancel Undercut Auctions"] = ""
-- L["Cheapest auction below min price."] = ""
-- L["Click to show auctions for this item."] = ""
-- L["Confirming %d / %d"] = ""
L["Create Macro and Bind ScrollWheel (with selected options)"] = "Créer une Macro et mettre pour raccourcis la molette de votre souris"
-- L["Currently Owned:"] = ""
-- L["Default Operation Tab"] = ""
L["Delete"] = "Supprimer"
-- L["Did not cancel %s because your cancel to repost threshold (%s) is invalid. Check your settings."] = ""
-- L["Did not cancel %s because your maximum price (%s) is invalid. Check your settings."] = ""
-- L["Did not cancel %s because your maximum price (%s) is lower than your minimum price (%s). Check your settings."] = ""
-- L["Did not cancel %s because your minimum price (%s) is invalid. Check your settings."] = ""
-- L["Did not cancel %s because your normal price (%s) is invalid. Check your settings."] = ""
-- L["Did not cancel %s because your normal price (%s) is lower than your minimum price (%s). Check your settings."] = ""
-- L["Did not post %s because your maximum price (%s) is invalid. Check your settings."] = ""
-- L["Did not post %s because your maximum price (%s) is lower than your minimum price (%s). Check your settings."] = ""
-- L["Did not post %s because your minimum price (%s) is invalid. Check your settings."] = ""
-- L["Did not post %s because your normal price (%s) is invalid. Check your settings."] = ""
-- L["Did not post %s because your normal price (%s) is lower than your minimum price (%s). Check your settings."] = ""
-- L["Did not reset %s because your maximum price (%s) is invalid. Check your settings."] = ""
-- L["Did not reset %s because your maximum price (%s) is lower than your minimum price (%s). Check your settings."] = ""
-- L["Did not reset %s because your minimum price (%s) is invalid. Check your settings."] = ""
-- L["Did not reset %s because your normal price (%s) is invalid. Check your settings."] = ""
-- L["Did not reset %s because your normal price (%s) is lower than your minimum price (%s). Check your settings."] = ""
-- L["Did not reset %s because your reset max cost (%s) is invalid. Check your settings."] = ""
-- L["Did not reset %s because your reset max item cost (%s) is invalid. Check your settings."] = ""
-- L["Did not reset %s because your reset min profit (%s) is invalid. Check your settings."] = ""
-- L["Did not reset %s because your reset resolution (%s) is invalid. Check your settings."] = ""
-- L["Disable Invalid Price Warnings"] = ""
L["Done Canceling"] = "Annulation terminé"
L["Done Posting"] = "Enchère(s) crée(s)"
--[==[ L[ [=[Done Posting
Total value of your auctions: %s
Incoming Gold: %s]=] ] = "" ]==]
L["Done Scanning"] = "Scan terminé" -- Needs review
--[==[ L[ [=[Done Scanning!
Could potentially reset %d items for %s profit.]=] ] = "" ]==]
L["Don't Post Items"] = "Ne pas poster les objets"
L["Down"] = "Bas"
L["Duration"] = "Durée" -- Needs review
-- L["Edit Post Price"] = ""
-- L["Enable Reset Scan"] = ""
L["Enable Sounds"] = "Activer les sons" -- Needs review
-- L["Error creating operation. Operation with name '%s' already exists."] = ""
L["General"] = "Général"
-- L["General Operation Options"] = ""
L["General Options"] = "Options générales" -- Needs review
-- L["General Reset Settings"] = ""
L["General Settings"] = "Paramètres généraux"
-- L["Give the new operation a name. A descriptive name will help you find this operation later."] = ""
L["Help"] = "Aide"
L["How long auctions should be up for."] = "Combien de temps les enchères doivent elles durer. "
-- L["How many auctions at the lowest price tier can be up at any one time. Setting this to 0 disables posting for any groups this operation is applied to."] = ""
L["How many items should be in a single auction, 20 will mean they are posted in stacks of 20."] = "Combien d'objets doivent être vendu en une seule enchère, 20 signifiera une seul pile de 20 objets."
-- L["How much to undercut other auctions by. Format is in \"#g#s#c\". For example, \"50g30s\" means 50 gold, 30 silver, and no copper."] = ""
-- L["If an item can't be posted for at least this amount higher than its current value, it won't be canceled to repost higher."] = ""
-- L["If checked, a cancel scan will cancel any auctions which can be reposted for a higher price."] = ""
-- L["If checked, a cancel scan will cancel any auctions which have been undercut and are still above your threshold."] = ""
-- L["If checked, Auctioning will ignore all auctions that are posted at a different stack size than your auctions. For example, if there are stacks of 1, 5, and 20 up and you're posting in stacks of 1, it'll ignore all stacks of 5 and 20."] = ""
-- L["If checked, groups which the opperation applies to will be included in a reset scan."] = ""
-- L["If checked, the minimum, normal and maximum prices of the first operation for the item will be shown in tooltips."] = ""
-- L["If checked, TSM will not print out a chat message when you have an invalid price for an item. However, it will still show as invalid in the log."] = ""
-- L["If checked, whenever you post an item at its normal price, the buyout will be rounded up to the nearest gold."] = ""
-- L["If enabled, instead of not posting when a whitelisted player has an auction posted, Auctioning will match their price."] = ""
L["If you don't have enough items for a full post, it will post with what you have."] = "Si vous n'avez pas assez d'objets pour remplir le stack, ça prendra ce que vous avez."
-- L["Ignore Low Duration Auctions"] = ""
L["Info"] = "Info" -- Needs review
-- L["Invalid scan data for item %s. Skipping this item."] = ""
-- L["Invalid seller data returned by server."] = ""
L["Item"] = "Objet" -- Needs review
L["Item/Group is invalid."] = "Objet/groupe invalide." -- Needs review
-- L["Keeping undercut auctions posted."] = ""
-- L["Keep Posted"] = ""
-- L["Log Info:"] = ""
-- L["Low Duration"] = ""
-- L["Lowest auction by whitelisted player."] = ""
-- L["Lowest Buyout"] = ""
-- L["Lowest Buyout:"] = ""
L["Macro created and keybinding set!"] = "Macro crée & raccourcis fixé !"
L["Macro Help"] = "Aide - Macro"
-- L["Match Stack Size"] = ""
-- L["Match Whitelist Players"] = ""
L["Max Cost:"] = "Coût max:" -- Needs review
-- L["Max Cost Per Item"] = ""
-- L["Maximum amount already posted."] = ""
L["Maximum Price"] = "Prix maximum" -- Needs review
L["Maximum Price:"] = "Prix maximum:" -- Needs review
L["Max Price Per:"] = "Prix max pour:" -- Needs review
L["Max Quantity:"] = "Quantité max:" -- Needs review
-- L["Max Quantity to Buy"] = ""
-- L["Max Reset Cost"] = ""
-- L["Minimum Price:"] = ""
-- L["Minimum Price (aka Threshold)"] = ""
-- L["Min Profit:"] = ""
-- L["Min Reset Profit"] = ""
L["Min (%s), Normal (%s), Max (%s)"] = "Min (%s), Normal (%s), Max (%s)" -- Needs review
L["Modifiers:"] = "Avec:"
-- L["Move AH Shortfall To Bags"] = ""
-- L["Move Group To Bags"] = ""
-- L["Move Group To Bank"] = ""
-- L["Move Non Group Items to Bank"] = ""
-- L["Move Post Cap To Bags"] = ""
-- L["Must wait for scan to finish before starting to reset."] = ""
L["New Operation"] = "Nouvelle opération" -- Needs review
-- L["No Items to Reset"] = ""
L["<none>"] = "<aucune>"
-- L["No posting."] = ""
L["Normal Price:"] = "Prix normal:" -- Needs review
-- L["Normal Price (aka Fallback)"] = ""
-- L["Not canceling."] = ""
-- L["Not canceling auction at reset price."] = ""
-- L["Not canceling auction below min price."] = ""
-- L["Not enough items in bags."] = ""
-- L["NOTE: You can right click on any of the price settings below to show a window which will help with more advanced price settings such as using a % of another price source."] = ""
-- L["Nothing to Move"] = ""
-- L["Not resetting."] = ""
L["Operation"] = "Opération" -- Needs review
L["Operation Name"] = "Nom de l'opération" -- Needs review
L["Operations"] = "Opérations" -- Needs review
L["Options"] = "Options"
-- L["Other Auctioning Searches"] = ""
L["Percentage of the buyout as bid, if you set this to 90% then a 100g buyout will have a 90g bid."] = "Pourcentage du prix d'achat en prix de départ, si vous choisissez par exemple 90%. Sur une vente à 100or, le prix de départ sera de 90or"
L["Player name"] = "Nom du joueur"
L["Plays the ready check sound when a post / cancel scan is complete and items are ready to be posting / canceled (the gray bar is all the way across)."] = "Lancer le son d'appel lorsquun scan d'annulation/création d'enchère est terminé et que les objets sont prêt a être annuler/posté (la barre grise est pleine)."
-- L["Please don't move items around in your bags while a post scan is running! The item was skipped to avoid an incorrect item being posted."] = ""
-- L["Post"] = ""
-- L["Post at Maximum Price"] = ""
-- L["Post at Minimum Price"] = ""
-- L["Post at Normal Price"] = ""
-- L["Post Cap"] = ""
-- L["Posted at whitelisted player's price."] = ""
-- L["Posting at normal price."] = ""
-- L["Posting at whitelisted player's price."] = ""
-- L["Posting at your current price."] = ""
-- L["Posting %d / %d"] = ""
-- L["Posting %d stack(s) of %d for %d hours."] = ""
-- L["Posting Price Settings"] = ""
L["Post Scan Finished"] = "Création des enchères terminée"
-- L["Post Settings"] = ""
-- L["Preparing Filter %d / %d"] = ""
-- L["Preparing Filters..."] = ""
-- L["Preparing to Move"] = ""
-- L["Price Resolution"] = ""
-- L["Price to post at if there are no auctions up under your maximum price. This includes the case where there's none of an item on the AH."] = ""
-- L["Processing Items..."] = ""
L["Profit:"] = "Profit:"
L["Profit Per Item"] = "Profit par objet"
-- L["Quantity (Yours)"] = ""
-- L["Relationships"] = ""
-- L["Repost Higher Threshold"] = ""
L["Reset"] = "Réinitialiser" -- Needs review
-- L["Reset Scan Finished"] = ""
L["Reset Settings"] = "Réinitialiser les paramètres" -- Needs review
-- L["Resetting enabled."] = ""
-- L["Restart"] = ""
L["Return to Summary"] = "Retour au résumé" -- Needs review
L["Right-Click to add %s to your friends list."] = "Clic-droit pour ajouter %s à votre liste d'amis." -- Needs review
-- L["Round Normal Price"] = ""
-- L["Running Scan..."] = ""
-- L["Save New Price"] = ""
L["Scan Complete!"] = "Scan terminé !" -- Needs review
L["Scanning %d / %d"] = "Scan %d / %d" -- Needs review
L["Scanning %d / %d (Page %d / %d)"] = "Scan %d / %d (Page %d / %d)" -- Needs review
L["ScrollWheel Direction (both recommended):"] = "Direction de la molette (les deux sont recommandées)"
-- 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 scan."] = ""
L["Seller"] = "Vendeur"
-- L["Seller name of lowest auction for item %s was not returned from server. Skipping this item."] = ""
-- L["'%s' has an Auctioning operation of '%s' which no longer exists."] = ""
-- L["'%s' has an Auctioning operation of '%s' which no longer exists. Auctioning will ignore this group until this is fixed."] = ""
-- L["Shift-Right-Click to show the options for this item's Auctioning group."] = ""
L["Shift-Right-Click to show the options for this operation.|r"] = "Maj+Clic droit pour afficher les options pour cette opération.|r" -- Needs review
L["Show All Auctions"] = "Afficher toutes les enchères" -- Needs review
-- L["Show Auctioning values in Tooltip"] = ""
-- L["Show Item Auctions"] = ""
-- L["Show Log"] = ""
-- L["%s item(s) to buy/cancel"] = ""
-- L["Skip"] = ""
L["Stack Size"] = "Taille de la pille"
-- L["Start Cancel Scan"] = ""
-- L["Starting Scan..."] = ""
-- L["Start Post Scan"] = ""
-- L["Start Reset Scan"] = ""
-- L["Stop"] = ""
-- L["Target Price"] = ""
-- L["Target Price:"] = ""
-- L["The filter cannot be empty. If you'd like to cancel all auctions, use the 'Cancel All Auctions' button."] = ""
-- L["The lowest price you want an item to be posted for. Auctioning will not undercut auctions below this price."] = ""
-- L["The maximum amount that you want to spend in order to reset a particular item. This is the total amount, not a per-item amount."] = ""
-- L["The maximum price you want an item to be posted for. Auctioning will not undercut auctions above this price."] = ""
-- L["The minimum profit you would want to make from doing a reset. This is a per-item price where profit is the price you reset to minus the average price you spent per item."] = ""
L["There are two ways of making clicking the Post / Cancel Auction button easier. You can put %s and %s in a macro (on separate lines), or use the utility below to have a macro automatically made and bound to scrollwheel for you."] = "Il y a deux façons pour rendre plus facile les boutons pour créer et annuler des ventes. Vous pouvez mettre %s et %s dans une macro (sur des lignes différentes) ou utiliser les options ci dessous pour créer automatiquement une macro & des raccourcis sur la molette de votre souris.."
-- L["This determines what size range of prices should be considered a single price point for the reset scan. For example, if this is set to 1s, an auction at 20g50s20c and an auction at 20g49s45c will both be considered to be the same price level."] = ""
-- L["This dropdown determines the default tab when you visit an operation."] = ""
-- L["This dropdown determines what Auctioning will do when the market for an item goes below your minimum price. You can either not post the items or post at one of your configured prices."] = ""
-- L["This is the maximum amount you want to pay for a single item when reseting."] = ""
-- L["This item does not have any seller data."] = ""
-- L["This number of undercut auctions will be kept on the auction house (not canceled) when doing a cancel scan."] = ""
L["Total Cost"] = "Coût total" -- Needs review
L["Under 30min"] = "Moins de 30min" -- Needs review
-- L["Undercut Amount"] = ""
-- L["Undercut by whitelisted player."] = ""
-- L["Undercutting competition."] = ""
L["Up"] = "Haut"
-- L["Use Stack Size as Cap"] = ""
-- L["When Below Threshold (aka Reset Method)"] = ""
L["Whitelist"] = "Liste Blanche"
L["Whitelists allow you to set other players besides you and your alts that you do not want to undercut; however, if somebody on your whitelist matches your buyout but lists a lower bid it will still consider them undercutting."] = "La liste blanche vous permet de configurer d'autres personnages (excepté vous & vos alts) que vous ne voulez pas concurrencer. Toutefois, si quelqu'un de votre liste blanche poste au même prix d'achat mais avec un prix de départ inférieur, ça les concurrencera toujours. "
L["Will bind ScrollWheelDown (plus modifiers below) to the macro created."] = "Placera comme raccourci la molette-bas (+ ALT/CTRL/MAJ si coché) à la macro crée."
L["Will bind ScrollWheelUp (plus modifiers below) to the macro created."] = "Placera comme raccourci la molette-haut (+ ALT/CTRL/MAJ si coché) à la macro crée."
-- L["Will cancel all your auctions at or below the specified duration, including ones you didn't post with Auctioning."] = ""
-- L["Will cancel all your auctions, including ones which you didn't post with Auctioning."] = ""
-- L["Will cancel all your auctions which match the specified filter, including ones which you didn't post with Auctioning."] = ""
L["Will cancel auctions even if they have a bid on them, you will take an additional gold cost if you cancel an auction with bid."] = "Annulera les ventes en cours, même si quelqu'un a enchérie dessus. Attention, ceci vous coutera une somme supplémentaire d'or."
L["You do not have any players on your whitelist yet."] = "Vous n'avez encore aucun joueur dans votre liste blanche."
-- L["Your auction has not been undercut."] = ""
-- L["Your Buyout"] = ""
-- L["You've been undercut."] = ""
+268
View File
@@ -0,0 +1,268 @@
-- ------------------------------------------------------------------------------ --
-- TradeSkillMaster_Auctioning --
-- http://www.curse.com/addons/wow/tradeskillmaster_auctioning --
-- --
-- A TradeSkillMaster Addon (http://tradeskillmaster.com) --
-- All Rights Reserved* - Detailed license information included with addon. --
-- ------------------------------------------------------------------------------ --
-- TradeSkillMaster_Auctioning Locale - koKR
-- Please use the localization app on CurseForge to update this
-- http://wow.curseforge.com/addons/TradeSkillMaster_Auctioning/localization/
local L = LibStub("AceLocale-3.0"):NewLocale("TradeSkillMaster_Auctioning", "koKR")
if not L then return end
L["2 to 12 hrs"] = "2 ~ 12 시간" -- Needs review
L["30min to 2hrs"] = "30 분 ~ 2 시간" -- Needs review
L["Add a new player to your whitelist."] = "화이트리스트에 새로운 플레이어 추가."
L["Add player"] = "플레이어 추가"
L["Any auctions at or below the selected duration will be ignored. Selecting \"<none>\" will cause no auctions to be ignored based on duration."] = "지정된 시간 이하의 기간이 남은 경매는 무시 됩니다. \\\"<없음>\\\"을 선택하면 남은 시간은 고려하지 않습니다." -- Needs review
L["At normal price and not undercut."] = "에누리없는 일반 가격" -- Needs review
L["Auction Buyout"] = "경매 즉구가"
L["Auction Buyout (Stack Price):"] = "즉시구매(묶음가격)"
L["Auction has been bid on."] = "입찰에 참여했습니다."
L["Auctioning operations contain settings for posting, canceling, and resetting items in a group. Type the name of the new operation into the box below and hit 'enter' to create a new Crafting operation."] = "경매 작업은 등록, 취소, 그룹 아이템 재설정등의 설정을 포함하고 있습니다. 아래 상자에 새 작업의 이름을 입력하고 '엔터'를 누르면 새 작업이 생성됩니다." -- Needs review
L["Auctioning Prices:"] = "경매 가격:" -- Needs review
L["Auction not found. Skipped."] = "경매를 찾을 수 없습니다. 건너뜁니다."
L["Auction Price Settings"] = "경매 가격 설정" -- Needs review
L["Auction Settings"] = "경매 설정" -- Needs review
L["auctions of|r %s"] = "개, 전체|r %s개" -- Needs review
L["Below min price, posting at reset price."] = "최소 가격 이하, 재설정 가격으로 등록" -- Needs review
L["Bid percent"] = "입찰 비율" -- Needs review
L["Cancel"] = "취소"
L["Cancel All Auctions"] = "모든 경매 취소" -- Needs review
L["Cancel Auctions with Bids"] = "입찰 있는 경매 취소" -- Needs review
L["Cancel Filter:"] = "취소 필터:" -- Needs review
L["Canceling all auctions."] = "모든 경매 취소 중." -- Needs review
L["Canceling auction which you've undercut."] = "에누리 당한 경매 취소 중." -- Needs review
L["Canceling %d / %d"] = "최소 중 %d / %d" -- Needs review
L["Canceling to repost at higher price."] = "최대값으로 재등록하기 위해 취소 중." -- Needs review
L["Canceling to repost at reset price."] = "재설정 가격으로 등록하기 위해 취소 중." -- Needs review
L["Canceling to repost higher."] = "높은 가격으로 재등록하기 위해 취소 중." -- Needs review
L["Canceling undercut auctions."] = "에누리 경매 취소 중." -- Needs review
L["Canceling undercut auctions and to repost higher."] = "에누리 당한 경매와 높은 가격으로 재등록하기 위해 취소 중." -- Needs review
L["Cancel Low Duration"] = "낮은 지속 기간 경매 취소" -- Needs review
L["Cancel Scan Finished"] = "취소 검색 완료"
L["Cancel Settings"] = "취소 설정" -- Needs review
L["Cancel to Repost Higher"] = "높은 가격으로 재등록하기 위해 취소" -- Needs review
L["Cancel Undercut Auctions"] = "에누리 경매 취소" -- Needs review
L["Cheapest auction below min price."] = "최저 가격 이하로 싼 경매" -- Needs review
L["Click to show auctions for this item."] = "이 아이템의 경매정보를 보려면 클릭하세요."
L["Confirming %d / %d"] = "확인 중 %d / %d" -- Needs review
L["Create Macro and Bind ScrollWheel (with selected options)"] = "매크로를 생성하고 선택된 모드키 + 마우스 휠에 할당"
L["Currently Owned:"] = "현재 소유자:"
L["Default Operation Tab"] = "기본 작업 탭" -- Needs review
L["Delete"] = "삭제"
L["Did not cancel %s because your cancel to repost threshold (%s) is invalid. Check your settings."] = "%s은(는) 잘못된 재등록 임계값(%s)을 가지고 있으므로 취소되지 않았습니다. 설정을 확인하세요." -- Needs review
L["Did not cancel %s because your maximum price (%s) is invalid. Check your settings."] = "\"%s은(는) 잘못된 최대 가격(%s)을 가지고 있으므로 취소되지 않았습니다. 설정을 확인하세요." -- Needs review
L["Did not cancel %s because your maximum price (%s) is lower than your minimum price (%s). Check your settings."] = "%s은(는) 최대 가격(%s)이 최소 가격(%s)보다 낮으므로 취소되지 않았습니다. 설정을 확인하세요." -- Needs review
L["Did not cancel %s because your minimum price (%s) is invalid. Check your settings."] = "%s은(는) 잘못된 최소 가격(%s)을 가지고 있으므로 취소되지 않았습니다. 설정을 확인하세요." -- Needs review
L["Did not cancel %s because your normal price (%s) is invalid. Check your settings."] = "%s은(는) 잘못된 일반 가격(%s)을 가지고 있으므로 취소되지 않았습니다. 설정을 확인하세요." -- Needs review
L["Did not cancel %s because your normal price (%s) is lower than your minimum price (%s). Check your settings."] = "%s은(는) 일반 가격(%s)이 최소 가격(%s)보다 낮으므로 취소되지 않았습니다. 설정을 확인하세요." -- Needs review
L["Did not post %s because your maximum price (%s) is invalid. Check your settings."] = "%s은(는) 잘못된 최대 가격(%s)을 가지고 있으므로 등록되지 않았습니다. 설정을 확인하세요." -- Needs review
L["Did not post %s because your maximum price (%s) is lower than your minimum price (%s). Check your settings."] = "%s은(는) 최대 가격(%s)이 최소 가격(%s)보다 낮으므로 등록되지 않았습니다. 설정을 확인하세요." -- Needs review
L["Did not post %s because your minimum price (%s) is invalid. Check your settings."] = "%s은(는) 잘못된 최소 가격(%s)을 가지고 있으므로 등록되지 않았습니다. 설정을 확인하세요." -- Needs review
L["Did not post %s because your normal price (%s) is invalid. Check your settings."] = "%s은(는) 잘못된 일반 가격(%s)을 가지고 있으므로 등록되지 않았습니다. 설정을 확인하세요." -- Needs review
L["Did not post %s because your normal price (%s) is lower than your minimum price (%s). Check your settings."] = "%s은(는) 일반 가격(%s)이 최소 가격(%s)보다 낮으므로 등록되지 않았습니다. 설정을 확인하세요." -- Needs review
L["Did not reset %s because your maximum price (%s) is invalid. Check your settings."] = "%s은(는) 잘못된 최대 가격(%s)을 가지고 있으므로 재설정되지 않았습니다. 설정을 확인하세요." -- Needs review
L["Did not reset %s because your maximum price (%s) is lower than your minimum price (%s). Check your settings."] = "%s은(는) 최대 가격(%s)이 최소 가격(%s)보다 낮으므로 재설정되지 않았습니다. 설정을 확인하세요." -- Needs review
L["Did not reset %s because your minimum price (%s) is invalid. Check your settings."] = "%s은(는) 잘못된 최소 가격(%s)을 가지고 있으므로 재설정되지 않았습니다. 설정을 확인하세요." -- Needs review
L["Did not reset %s because your normal price (%s) is invalid. Check your settings."] = "%s은(는) 잘못된 일반 가격(%s)을 가지고 있으므로 재설정되지 않았습니다. 설정을 확인하세요." -- Needs review
L["Did not reset %s because your normal price (%s) is lower than your minimum price (%s). Check your settings."] = "%s은(는) 일반 가격(%s)이 최소 가격(%s)보다 낮으므로 재설정되지 않았습니다. 설정을 확인하세요." -- Needs review
L["Did not reset %s because your reset max cost (%s) is invalid. Check your settings."] = "%s은(는) 잘못된 재설정 최대 비용(%s)을 가지고 있으므로 재설정되지 않았습니다. 설정을 확인하세요." -- Needs review
L["Did not reset %s because your reset max item cost (%s) is invalid. Check your settings."] = "%s은(는) 잘못된 재설정 최대 아이템 가격(%s)을 가지고 있으므로 재설정되지 않았습니다. 설정을 확인하세요." -- Needs review
L["Did not reset %s because your reset min profit (%s) is invalid. Check your settings."] = "%s은(는) 잘못된 재설정 최소 수익(%s)을 가지고 있으므로 재설정되지 않았습니다. 설정을 확인하세요." -- Needs review
L["Did not reset %s because your reset resolution (%s) is invalid. Check your settings."] = "%s은(는) 잘못된 재설정 정확도(%s)을 가지고 있으므로 재설정되지 않았습니다. 설정을 확인하세요." -- Needs review
L["Disable Invalid Price Warnings"] = "잘못된 가격 경고 사용 안 함" -- Needs review
L["Done Canceling"] = "취소 완료"
L["Done Posting"] = "등록 완료" -- Needs review
L[ [=[Done Posting
Total value of your auctions: %s
Incoming Gold: %s]=] ] = "등록 완료\\n\\n총 경매 가치: %s\\n골드 수익: %s" -- Needs review
L["Done Scanning"] = "검색 완료" -- Needs review
L[ [=[Done Scanning!
Could potentially reset %d items for %s profit.]=] ] = "검색 완료!\\n\\n%d 아이템을 재설정하면 %s 이윤이 발생할 가능성이 있습니다." -- Needs review
L["Don't Post Items"] = "등록 안 함" -- Needs review
L["Down"] = "아래" -- Needs review
L["Duration"] = "지속 기간" -- Needs review
L["Edit Post Price"] = "등록 가격 수정"
L["Enable Reset Scan"] = "재설정 검색 활성화" -- Needs review
L["Enable Sounds"] = "알람 사용" -- Needs review
L["Error creating operation. Operation with name '%s' already exists."] = "작업 생성 중 오류가 발생했습니다. 작업 이름 '%s'이(가) 이미 존재합니다." -- Needs review
L["General"] = "일반"
L["General Operation Options"] = "일반 작업 옵션" -- Needs review
L["General Options"] = "일반 옵션" -- Needs review
L["General Reset Settings"] = "일반 재설정 설정" -- Needs review
L["General Settings"] = "일반 설정"
L["Give the new operation a name. A descriptive name will help you find this operation later."] = "새 작업의 이름을 지정하세요. 설명이 포함된 이름은 나중에 이 작업을 찾는 데 도움이 됩니다." -- Needs review
L["Help"] = "도움말"
L["How long auctions should be up for."] = "경매 지속시간"
L["How many auctions at the lowest price tier can be up at any one time. Setting this to 0 disables posting for any groups this operation is applied to."] = "한 번에 몇 개의 경매를 등록할지 지정합니다. 0으로 설정하면 이 작업이 적용되는 모든 그룹은 경매 등록을 하지 않습니다." -- Needs review
L["How many items should be in a single auction, 20 will mean they are posted in stacks of 20."] = "각 경매당 등록할 아이템의 개수를 지정, 20은 20 묶음을 등록한다는 의미입니다." -- Needs review
L["How much to undercut other auctions by. Format is in \"#g#s#c\". For example, \"50g30s\" means 50 gold, 30 silver, and no copper."] = "다른 사람이 등록한 가격에서 얼마 만큼을 에누리할지 결정합니다. 입력 형식은 \\\"#g#s#c\\\"입니다. 예를 들어 \\\"50g30s\\\"를 입력하면 50 골드 30 실버 0 코퍼를 의미합니다." -- Needs review
L["If an item can't be posted for at least this amount higher than its current value, it won't be canceled to repost higher."] = "만일 아이템이 현재 가격에서 이 가격만큼의 높은 가격으로 재등록할 수 없다면, 높은 가격으로 재등록하기 위해 경매를 취소하지 않습니다." -- Needs review
L["If checked, a cancel scan will cancel any auctions which can be reposted for a higher price."] = "선택하면, 취소 검색은 높은 가격으로 재등록할 수 있는 경매를 취소합니다." -- Needs review
L["If checked, a cancel scan will cancel any auctions which have been undercut and are still above your threshold."] = "선택하면, 취소 검색은 에누리를 당했지만, 여전히 임계값 이상인 경매를 취소합니다." -- Needs review
L["If checked, Auctioning will ignore all auctions that are posted at a different stack size than your auctions. For example, if there are stacks of 1, 5, and 20 up and you're posting in stacks of 1, it'll ignore all stacks of 5 and 20."] = "선택하면, 당신의 경매와 다른 크기의 묶음을 갖은 모든 경매는 무시됩니다. 예를 들면, 만일 경매장에 1, 5, 20 묶음짜리 아이템들이 등록되어 있고, 당신이 1 묶음 단위로 경매를 등록한다면 5, 20 묶음짜리 경매는 무시됩니다." -- Needs review
L["If checked, groups which the opperation applies to will be included in a reset scan."] = "선택하면, 이 작업이 적용된 그룹은 재설정 검색에 포함됩니다." -- Needs review
L["If checked, the minimum, normal and maximum prices of the first operation for the item will be shown in tooltips."] = "선택하면, 아이템의 첫 번째 작업의 최소, 일반, 최대 가격을 툴팁에 표시합니다." -- Needs review
L["If checked, TSM will not print out a chat message when you have an invalid price for an item. However, it will still show as invalid in the log."] = "선택하면, 아이템이 잘못된 가격을 가지고 있더라도 TSM은 채팅창에 메시지를 출력하지 않습니다. 하지만, 로그에는 여전히 잘못된 값으로 표시됩니다." -- Needs review
L["If checked, whenever you post an item at its normal price, the buyout will be rounded up to the nearest gold."] = "선택하면, 아이템을 일반 가격으로 등록할 때, 즉시 구매가는 가까운 골드값으로 반올림됩니다." -- Needs review
L["If enabled, instead of not posting when a whitelisted player has an auction posted, Auctioning will match their price."] = "선택하면, 화이트리스트 목록에 있는 플레이어가 등록한 경매가 있으면 그들의 가격과 일치 시켜 등록합니다." -- Needs review
L["If you don't have enough items for a full post, it will post with what you have."] = "전체등록에 필요한 충분한 수량의 아이템을 가지고 있지 않을 경우, 현재 가지고 있는 수량만큼만 등록합니다." -- Needs review
L["Ignore Low Duration Auctions"] = "낮은 지속 기간 경매 무시" -- Needs review
L["Info"] = "정보"
L["Invalid scan data for item %s. Skipping this item."] = "%s는 잘못된 검색 데이터입니다. 건너뜁니다."
L["Invalid seller data returned by server."] = "서버로부터 받은 판매자 정보가 유효하지 않습니다." -- Needs review
L["Item"] = "아이템"
L["Item/Group is invalid."] = "잘못된 아이템/그룹"
L["Keeping undercut auctions posted."] = "에누리 된 경매를 유지합니다." -- Needs review
L["Keep Posted"] = "등록 유지" -- Needs review
L["Log Info:"] = "로그 정보:"
L["Low Duration"] = "낮은 지속 기간" -- Needs review
L["Lowest auction by whitelisted player."] = "화이트리스트에 있는 사용자의 최저경매입니다." -- Needs review
L["Lowest Buyout"] = "최저 즉구가"
L["Lowest Buyout:"] = "최소 즉구가:"
L["Macro created and keybinding set!"] = "매크로가 생성되고 키에 할당되었습니다!"
L["Macro Help"] = "매크로 도움말"
L["Match Stack Size"] = "묶음 크기 일치" -- Needs review
L["Match Whitelist Players"] = "화이트리스트 플레이어와 일치" -- Needs review
L["Max Cost:"] = "최대 비용:"
L["Max Cost Per Item"] = "아이템당 최대 비용" -- Needs review
L["Maximum amount already posted."] = "최대량이 이미 등록되었습니다."
L["Maximum Price"] = "최대 가격" -- Needs review
L["Maximum Price:"] = "최대 가격:" -- Needs review
L["Max Price Per:"] = "당 최대 가격:"
L["Max Quantity:"] = "최대 수량:"
L["Max Quantity to Buy"] = "최대 구매 수량" -- Needs review
L["Max Reset Cost"] = "최대 재설정 비용" -- Needs review
L["Minimum Price:"] = "최소 가격:" -- Needs review
L["Minimum Price (aka Threshold)"] = "최소 가격 (임계값)" -- Needs review
L["Min Profit:"] = "최소 이윤:"
L["Min Reset Profit"] = "최소 재설정 수익" -- Needs review
L["Min (%s), Normal (%s), Max (%s)"] = "최소 (%s), 일반 (%s), 최대 (%s)" -- Needs review
L["Modifiers:"] = "모드 키:"
L["Move AH Shortfall To Bags"] = "경매 부족 분량 가방으로 이동" -- Needs review
L["Move Group To Bags"] = "그룹 가방으로 이동" -- Needs review
L["Move Group To Bank"] = "그룹 은행으로 이동" -- Needs review
L["Move Non Group Items to Bank"] = "그룹 없는 아이템 은행으로 이동" -- Needs review
L["Move Post Cap To Bags"] = "등록 한계 분량 가방으로 이동" -- Needs review
L["Must wait for scan to finish before starting to reset."] = "검색이 끝난 후 재설정이 가능합니다. 기다려 주세요."
L["New Operation"] = "새 작업" -- Needs review
L["No Items to Reset"] = "재설정할 아이템 없음"
L["<none>"] = "<없음>"
L["No posting."] = "등록되지 않았습니다." -- Needs review
L["Normal Price:"] = "일반 가격:" -- Needs review
L["Normal Price (aka Fallback)"] = "일반 가격 (대비값)" -- Needs review
L["Not canceling."] = "취소되지 않았습니다." -- Needs review
L["Not canceling auction at reset price."] = "재설정가격으로 취소 안 함." -- Needs review
L["Not canceling auction below min price."] = "최소 가격 이하의 경매가 취소되지 않았습니다." -- Needs review
L["Not enough items in bags."] = "충분한 수량의 아이템이 가방에 없습니다."
L["NOTE: You can right click on any of the price settings below to show a window which will help with more advanced price settings such as using a % of another price source."] = "안내: 아래의 가격 설정 부분을 클릭하면 다른 출처의 가격에 대한 백분율을 입력 값으로 지정하는 등과 같은 고급 설정을 할 수 있도록 도와주는 창이 나타납니다." -- Needs review
L["Nothing to Move"] = "이동할 아이템 없음" -- Needs review
L["Not resetting."] = "재설정되지 않았습니다." -- Needs review
L["Operation"] = "작업" -- Needs review
L["Operation Name"] = "작업 이름" -- Needs review
L["Operations"] = "작업" -- Needs review
L["Options"] = "옵션"
L["Other Auctioning Searches"] = "기타 경매 검색" -- Needs review
L["Percentage of the buyout as bid, if you set this to 90% then a 100g buyout will have a 90g bid."] = "즉시 구매가의 퍼센트로 경매가 지정, 90%로 설정할 때 즉시 구매가가 100골드라면 90골드가 경매 시작가입니다."
L["Player name"] = "플레이어 이름"
L["Plays the ready check sound when a post / cancel scan is complete and items are ready to be posting / canceled (the gray bar is all the way across)."] = "검색이 완료되어 경매 등록/취소가 가능하면 알람 소리를 재생합니다. (회색 막대가 모두 채워졌을 때입니다.)" -- Needs review
L["Please don't move items around in your bags while a post scan is running! The item was skipped to avoid an incorrect item being posted."] = "등록 검색이 진행되는 동안 가방에 있는 아이템을 이동하지 말아 주시기 바랍니다! 잘못된 아이템이 등록되는 걸 방지하기 위해 이 아이템은 건너뜁니다."
L["Post"] = "등록"
L["Post at Maximum Price"] = "최대 가격으로 등록" -- Needs review
L["Post at Minimum Price"] = "최소 가격으로 등록\"" -- Needs review
L["Post at Normal Price"] = "일반 가격으로 등록" -- Needs review
L["Post Cap"] = "등록 한계" -- Needs review
L["Posted at whitelisted player's price."] = "화이트리스트에 있는 사용자의 가격으로 등록" -- Needs review
L["Posting at normal price."] = "일반 가격으로 등록" -- Needs review
L["Posting at whitelisted player's price."] = "화이트리스트 플레이어의 가격으로 등록" -- Needs review
L["Posting at your current price."] = "현재가로 등록"
L["Posting %d / %d"] = "등록 %d / %d" -- Needs review
L["Posting %d stack(s) of %d for %d hours."] = "%d개의 %d묶음이 %d으로 등록되었습니다." -- Needs review
L["Posting Price Settings"] = "등록 가격 설정" -- Needs review
L["Post Scan Finished"] = "등록 검색 완료"
L["Post Settings"] = "등록 설정" -- Needs review
L["Preparing Filter %d / %d"] = "필터 준비 중 %d / %d" -- Needs review
L["Preparing Filters..."] = "필터 준비 중..." -- Needs review
L["Preparing to Move"] = "이동 준비 중" -- Needs review
L["Price Resolution"] = "가격 정확도" -- Needs review
L["Price to post at if there are no auctions up under your maximum price. This includes the case where there's none of an item on the AH."] = "당신의 최대 가격 이하로 등록된 경쟁자의 경매가 없다면 이 가격으로 등록합니다. 이 가격은 경쟁자가 등록한 경매 아이템이 없을 때도 적용됩니다." -- Needs review
L["Processing Items..."] = "아이템 처리중..."
L["Profit:"] = "이윤:"
L["Profit Per Item"] = "아이템당 이윤"
L["Quantity (Yours)"] = "수량(당신소유)"
L["Relationships"] = "관계" -- Needs review
L["Repost Higher Threshold"] = "높은 임계값으로 재등록" -- Needs review
L["Reset"] = "재설정" -- Needs review
L["Reset Scan Finished"] = "재설정 검색 완료"
L["Reset Settings"] = "재설정 설정" -- Needs review
L["Resetting enabled."] = "재설정 활성화." -- Needs review
L["Restart"] = "재시작" -- Needs review
L["Return to Summary"] = "요약으로 복귀"
L["Right-Click to add %s to your friends list."] = "Right-Click 하면 %s(을)를 친구목록에 추가합니다." -- Needs review
L["Round Normal Price"] = "일반 가격 반올림" -- Needs review
L["Running Scan..."] = "검색 진행 중..." -- Needs review
L["Save New Price"] = "새 가격 저장" -- Needs review
L["Scan Complete!"] = "검색 완료!" -- Needs review
L["Scanning %d / %d"] = "검색 중 %d / %d" -- Needs review
L["Scanning %d / %d (Page %d / %d)"] = "검색 중 %d / %d (페이지 %d / %d)" -- 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."] = "이 드롭다운에서 기간을 선택하고 아래의 버튼을 클릭하면 지정한 기간 또는 그 이하의 모든 경매는 취소됩니다." -- Needs review
L["Select the groups which you would like to include in the scan."] = "검색에 포함될 그룹을 선택하세요." -- Needs review
L["Seller"] = "판매자"
L["Seller name of lowest auction for item %s was not returned from server. Skipping this item."] = "서버로부터 %s 아이템의 최소경매가격 판매자 이름을 받지 못했습니다. 이 아이템은 건너뜁니다."
L["'%s' has an Auctioning operation of '%s' which no longer exists."] = "'%s'은(는) 존재하지 않는 경매 작업 '%s'을(를) 가지고 있습니다." -- Needs review
L["'%s' has an Auctioning operation of '%s' which no longer exists. Auctioning will ignore this group until this is fixed."] = "'%s'은(는) 존재하지 않는 경매 작업 '%s'을(를) 가지고 있습니다. 문제가 해결될 때까지 이 그룹은 무시됩니다." -- Needs review
L["Shift-Right-Click to show the options for this item's Auctioning group."] = "Shift-Right-Click 하면 이 아이템 그룹의 옵션을 보여줍니다." -- Needs review
L["Shift-Right-Click to show the options for this operation.|r"] = "Shift-Right-Click 하면 이 작업의 옵션을 보여줍니다.|r" -- Needs review
L["Show All Auctions"] = "모든 경매 보기"
L["Show Auctioning values in Tooltip"] = "경매 가격을 툴팁에 표시합니다." -- Needs review
L["Show Item Auctions"] = "아이템 보기"
L["Show Log"] = "로그 보기"
L["%s item(s) to buy/cancel"] = "%s 아이템 남음(구매/취소)"
L["Skip"] = "건너뜀"
L["Stack Size"] = "묶음 갯수" -- Needs review
L["Start Cancel Scan"] = "취소 검색 시작" -- Needs review
L["Starting Scan..."] = "검색 시작..." -- Needs review
L["Start Post Scan"] = "등록 검색 시작" -- Needs review
L["Start Reset Scan"] = "재설정 검색 시작" -- Needs review
L["Stop"] = "중지" -- Needs review
L["Target Price"] = "목표 가격"
L["Target Price:"] = "목표 가격:"
L["The filter cannot be empty. If you'd like to cancel all auctions, use the 'Cancel All Auctions' button."] = "필터는 공백일 수 없습니다. 모든 경매를 취소하고자 하면 '모든 경매 취소' 버튼을 사용하세요." -- Needs review
L["The lowest price you want an item to be posted for. Auctioning will not undercut auctions below this price."] = "등록할 아이템의 최소 가격입니다. 이 가격의 이하의 아이템은 에누리를 적용하지 않습니다." -- Needs review
L["The maximum amount that you want to spend in order to reset a particular item. This is the total amount, not a per-item amount."] = "특정 아이템을 재설정하기 위해서 지출하고자 하는 최대 금액입니다. 아이템별 금액이 아니고 총금액입니다."
L["The maximum price you want an item to be posted for. Auctioning will not undercut auctions above this price."] = "등록할 아이템의 최대 가격입니다. 이 가격 이상의 아이템은 에누리를 적용하지 않습니다." -- Needs review
L["The minimum profit you would want to make from doing a reset. This is a per-item price where profit is the price you reset to minus the average price you spent per item."] = "재설정으로 얻고자 하는 최소 이윤. 아이템당 소비한 평균가격을 뺀 아이템당 이윤입니다."
L["There are two ways of making clicking the Post / Cancel Auction button easier. You can put %s and %s in a macro (on separate lines), or use the utility below to have a macro automatically made and bound to scrollwheel for you."] = "경매 등록/취소 버튼을 쉽게 클릭하는 방법은 두 가지가 있습니다. 매크로에 %s 와 %s를 추가(한 개의 매크로에 두 라인을 입력하는 게 아니고 별도의 2개의 매크로)하거나 또는 아래의 유틸리티를 사용하면 자동으로 매크로가 생성되어 마우스 휠에 등록됩니다."
L["This determines what size range of prices should be considered a single price point for the reset scan. For example, if this is set to 1s, an auction at 20g50s20c and an auction at 20g49s45c will both be considered to be the same price level."] = "검색 재설정 시 동일가격으로 인식하는 범위를 지정합니다. 예를 들어 1실버로 설정을 했다면 20골드 50실버 20코퍼와 20골드 49실버 45코퍼는 같은 가격범위로 인식합니다."
L["This dropdown determines the default tab when you visit an operation."] = "왼쪽 목록에서 작업을 선택했을 때 기본으로 보여줄 탭을 지정합니다." -- Needs review
L["This dropdown determines what Auctioning will do when the market for an item goes below your minimum price. You can either not post the items or post at one of your configured prices."] = "이 드롭다운은 아이템의 시장 가격이 최소 가격 이하로 형성되었을 때 어떻게 할지를 결정합니다. 아이템을 등록하지 않거나 지정된 설정 중 하나를 선택해 등록할 수 있습니다." -- Needs review
L["This is the maximum amount you want to pay for a single item when reseting."] = "재 설정시 한 개의 아이템에 대해 지급할 수 있는 최대 금액입니다."
L["This item does not have any seller data."] = "이 아이템은 판매자 정보가 없습니다."
L["This number of undercut auctions will be kept on the auction house (not canceled) when doing a cancel scan."] = "취소 검색 시 이 수치의 에누리 경매는 경매장에 유지됩니다. (취소되지 않습니다.)" -- Needs review
L["Total Cost"] = "총 비용"
L["Under 30min"] = "30 분 미만" -- Needs review
L["Undercut Amount"] = "에누리 액수" -- Needs review
L["Undercut by whitelisted player."] = "하이트리스트 사용자에 의한 에누리 발생."
L["Undercutting competition."] = "에누리 경쟁자"
L["Up"] = "" -- Needs review
L["Use Stack Size as Cap"] = "묶음 크기를 한계로 사용" -- Needs review
L["When Below Threshold (aka Reset Method)"] = "임계값 이하일 때 (재설정 방식)" -- Needs review
L["Whitelist"] = "화이트리스트"
L["Whitelists allow you to set other players besides you and your alts that you do not want to undercut; however, if somebody on your whitelist matches your buyout but lists a lower bid it will still consider them undercutting."] = "화이트리스에는 당신과 당신의 부캐릭을 제외한 에누리(언더컷)를 원치 않는 플레이어를 설정할 수 있습니다. 하지만, 화이트리스트에 있는 누군가가 당신의 즉시구매가와 일치하지만 더 낮은 입찰가를 제시한 경우 그들을 에누리 대상으로 고려합니다."
L["Will bind ScrollWheelDown (plus modifiers below) to the macro created."] = "생성된 매크로를 마우스 휠 다운(+ 아래에서 선택한 모드키)에 할당"
L["Will bind ScrollWheelUp (plus modifiers below) to the macro created."] = "생성된 매크로를 마우스 휠 업(+ 아래에서 선택한 모드키)에 할당"
L["Will cancel all your auctions at or below the specified duration, including ones you didn't post with Auctioning."] = "등록되지 않은 아이템을 포함한 지정한 기간 또는 그 이하의 모든 경매가 취소됩니다." -- Needs review
L["Will cancel all your auctions, including ones which you didn't post with Auctioning."] = "등록되지 않은 아이템을 포함한 모든 경매가 취소됩니다." -- Needs review
L["Will cancel all your auctions which match the specified filter, including ones which you didn't post with Auctioning."] = "등록되지 않은 아이템을 포함한 지정한 필터와 일치하는 모든 경매가 취소됩니다." -- Needs review
L["Will cancel auctions even if they have a bid on them, you will take an additional gold cost if you cancel an auction with bid."] = "입찰자가 있더라도 경매를 취소합니다. 입찰자가 있는 경매를 취소하면 추가 골드가 소비됩니다."
L["You do not have any players on your whitelist yet."] = "화이트리스트에 추가된 플레이어가 없습니다."
L["Your auction has not been undercut."] = "에누리 발생 안 함." -- Needs review
L["Your Buyout"] = "당신의 즉구가" -- Needs review
L["You've been undercut."] = "에누리 발생."
+274
View File
@@ -0,0 +1,274 @@
-- ------------------------------------------------------------------------------ --
-- TradeSkillMaster_Auctioning --
-- http://www.curse.com/addons/wow/tradeskillmaster_auctioning --
-- --
-- A TradeSkillMaster Addon (http://tradeskillmaster.com) --
-- All Rights Reserved* - Detailed license information included with addon. --
-- ------------------------------------------------------------------------------ --
-- TradeSkillMaster_Auctioning Locale - ptBR
-- Please use the localization app on CurseForge to update this
-- http://wow.curseforge.com/addons/TradeSkillMaster_Auctioning/localization/
local L = LibStub("AceLocale-3.0"):NewLocale("TradeSkillMaster_Auctioning", "ptBR")
if not L then return end
L["2 to 12 hrs"] = "2h á 12hrs" -- Needs review
L["30min to 2hrs"] = "30min à 2hrs" -- Needs review
L["Add a new player to your whitelist."] = "Adicionar um jogador a lista branca."
L["Add player"] = "Adicionar jogador"
L["Any auctions at or below the selected duration will be ignored. Selecting \"<none>\" will cause no auctions to be ignored based on duration."] = "Ignora qualquer leilão com a mesma duração ou abaixo da selecionada. Selecionando \"<nenhum>\" fará com que nenhum leilão seja ignorado baseado na duração."
L["At normal price and not undercut."] = "Ao preço normal e não cortando." -- Needs review
L["Auction Buyout"] = "Arremate do Leilão"
L["Auction Buyout (Stack Price):"] = "Arremate do Leilão (Preço da Pilha):"
L["Auction has been bid on."] = "O leilão recebeu um lance."
L["Auctioning operations contain settings for posting, canceling, and resetting items in a group. Type the name of the new operation into the box below and hit 'enter' to create a new Crafting operation."] = "Operações de leilão contem configurações para a publicação, o cancelamento, e redefinir os itens em um grupo. Digite o nome da nova operação na caixa abaixo e clique em 'entrar' para criar uma nova operação de Craft." -- Needs review
L["Auctioning Prices:"] = "Configurações Preços" -- Needs review
L["Auction not found. Skipped."] = "Leilão não encontrado. Pulado."
L["Auction Price Settings"] = "Leilão Configurações Preço" -- Needs review
L["Auction Settings"] = "Configurações leilão" -- Needs review
-- L["auctions of|r %s"] = ""
L["Below min price, posting at reset price."] = "Abaixo do preço min, postando a preço de reset." -- Needs review
L["Bid percent"] = "Porcentagem do lance"
L["Cancel"] = "Cancelar"
L["Cancel All Auctions"] = "Cancelar todos os Leilões" -- Needs review
L["Cancel Auctions with Bids"] = "Cancelar Leilões com Lances" -- Needs review
L["Cancel Filter:"] = "Cancelar Filtros" -- Needs review
L["Canceling all auctions."] = "Cancelando todos os leilões."
L["Canceling auction which you've undercut."] = "Cancelando leilão que você cortou."
L["Canceling %d / %d"] = "Cancelando %d / %d" -- Needs review
L["Canceling to repost at higher price."] = "Cancelando para repostar num preço mais alto."
L["Canceling to repost at reset price."] = "Cancelando para repostar no Preço de Redefinição."
-- L["Canceling to repost higher."] = ""
L["Canceling undercut auctions."] = "Cancelando leilões Cortados." -- Needs review
-- L["Canceling undercut auctions and to repost higher."] = ""
-- L["Cancel Low Duration"] = ""
L["Cancel Scan Finished"] = "Escaneamento de Cancelamento Finalizado"
L["Cancel Settings"] = "Cancelar Configurações" -- Needs review
-- L["Cancel to Repost Higher"] = ""
L["Cancel Undercut Auctions"] = "Cancelar Leilões Cortados" -- Needs review
L["Cheapest auction below min price."] = "Leilão abaixo do Preço Minimo" -- Needs review
L["Click to show auctions for this item."] = "Clique para exibir os leilões para este item."
L["Confirming %d / %d"] = "Confirmando %d / %d" -- Needs review
L["Create Macro and Bind ScrollWheel (with selected options)"] = "Criar uma Macro e estabelecer a Roda do Mouse como atalho (com as opções selecionadas)"
L["Currently Owned:"] = "Ganhador Atual:"
L["Default Operation Tab"] = "Operação Padrão" -- Needs review
L["Delete"] = "Apagar"
L["Did not cancel %s because your cancel to repost threshold (%s) is invalid. Check your settings."] = "Não cancelou %s porque o seu cancelamento para repassar o limite (%s) é inválido. Verifique suas configurações." -- Needs review
L["Did not cancel %s because your maximum price (%s) is invalid. Check your settings."] = "Não cancelou %s porque o seu preço máximo (%s) é inválido. Verifique suas configurações." -- Needs review
L["Did not cancel %s because your maximum price (%s) is lower than your minimum price (%s). Check your settings."] = "Não cancelou %s porque o seu preço máximo (%s) é menor do que o seu preço mínimo (%s). Verifique suas configurações." -- Needs review
L["Did not cancel %s because your minimum price (%s) is invalid. Check your settings."] = "Não cancelou %s porque o seu preço mínimo (%s) é inválido. Verifique suas configurações." -- Needs review
L["Did not cancel %s because your normal price (%s) is invalid. Check your settings."] = "Não cancelou %s porque o seu preço normal (%s) é inválido. Verifique suas configurações." -- Needs review
L["Did not cancel %s because your normal price (%s) is lower than your minimum price (%s). Check your settings."] = "Não cancelou %s porque o seu preço normal (%s) é menor do que o seu preço mínimo (%s). Verifique suas configurações." -- Needs review
L["Did not post %s because your maximum price (%s) is invalid. Check your settings."] = "Não postou %s porque o seu preço máximo (%s) é inválido. Verifique suas configurações." -- Needs review
L["Did not post %s because your maximum price (%s) is lower than your minimum price (%s). Check your settings."] = "Não postou %s porque o seu preço máximo (%s) é menor do que o preço mínimo (%s). Verifique suas configurações." -- Needs review
-- L["Did not post %s because your minimum price (%s) is invalid. Check your settings."] = ""
-- L["Did not post %s because your normal price (%s) is invalid. Check your settings."] = ""
-- L["Did not post %s because your normal price (%s) is lower than your minimum price (%s). Check your settings."] = ""
-- L["Did not reset %s because your maximum price (%s) is invalid. Check your settings."] = ""
-- L["Did not reset %s because your maximum price (%s) is lower than your minimum price (%s). Check your settings."] = ""
-- L["Did not reset %s because your minimum price (%s) is invalid. Check your settings."] = ""
-- L["Did not reset %s because your normal price (%s) is invalid. Check your settings."] = ""
-- L["Did not reset %s because your normal price (%s) is lower than your minimum price (%s). Check your settings."] = ""
-- L["Did not reset %s because your reset max cost (%s) is invalid. Check your settings."] = ""
-- L["Did not reset %s because your reset max item cost (%s) is invalid. Check your settings."] = ""
-- L["Did not reset %s because your reset min profit (%s) is invalid. Check your settings."] = ""
-- L["Did not reset %s because your reset resolution (%s) is invalid. Check your settings."] = ""
-- L["Disable Invalid Price Warnings"] = ""
L["Done Canceling"] = "Cancelamento Concluído"
L["Done Posting"] = "Postagem Concluída"
L[ [=[Done Posting
Total value of your auctions: %s
Incoming Gold: %s]=] ] = [=[Postagem Completa
Valor total de seus leilões: %s
Ouro a ser recebido: %s]=]
-- L["Done Scanning"] = ""
L[ [=[Done Scanning!
Could potentially reset %d items for %s profit.]=] ] = [=[Escaneamento Completo
Pode redefinir potencialmente %d itens para um lucro de %s.]=]
L["Don't Post Items"] = "Não Postar Itens"
L["Down"] = "Abaixo"
L["Duration"] = "Duração"
L["Edit Post Price"] = "Editar Preço de Postagem"
-- L["Enable Reset Scan"] = ""
-- L["Enable Sounds"] = ""
-- L["Error creating operation. Operation with name '%s' already exists."] = ""
L["General"] = "Geral"
-- L["General Operation Options"] = ""
L["General Options"] = "Opções Gerais" -- Needs review
-- L["General Reset Settings"] = ""
L["General Settings"] = "Configurações Gerais"
L["Give the new operation a name. A descriptive name will help you find this operation later."] = "Dê um nome a nova operação. Um nome descritivo ajudará você a encontrar esta operação mais tarde." -- Needs review
L["Help"] = "Ajuda"
L["How long auctions should be up for."] = "Quanto tempo os leilões devem durar."
-- L["How many auctions at the lowest price tier can be up at any one time. Setting this to 0 disables posting for any groups this operation is applied to."] = ""
L["How many items should be in a single auction, 20 will mean they are posted in stacks of 20."] = "Quantos itens devem estar em um mesmo leilão, 20 significa que serão postados em pilhas de 20."
-- L["How much to undercut other auctions by. Format is in \"#g#s#c\". For example, \"50g30s\" means 50 gold, 30 silver, and no copper."] = ""
-- L["If an item can't be posted for at least this amount higher than its current value, it won't be canceled to repost higher."] = ""
L["If checked, a cancel scan will cancel any auctions which can be reposted for a higher price."] = "Se marcada, uma varredura Cancelar irá cancelar qualquer leilão que pode ser republicados por um preço mais elevado." -- Needs review
-- L["If checked, a cancel scan will cancel any auctions which have been undercut and are still above your threshold."] = ""
L["If checked, Auctioning will ignore all auctions that are posted at a different stack size than your auctions. For example, if there are stacks of 1, 5, and 20 up and you're posting in stacks of 1, it'll ignore all stacks of 5 and 20."] = "Se marcada, O TSM irá ignorar todos os leilões que são postados em um tamanho de pilha diferente do que seus leilões. Por exemplo, se há pilhas de 1, 5 e 20 e você está postando em pilhas de 1, ele vai ignorar todas as pilhas de 5 e 20." -- Needs review
-- L["If checked, groups which the opperation applies to will be included in a reset scan."] = ""
-- L["If checked, the minimum, normal and maximum prices of the first operation for the item will be shown in tooltips."] = ""
L["If checked, TSM will not print out a chat message when you have an invalid price for an item. However, it will still show as invalid in the log."] = "Se marcado, o TSM não irá mandar uma mensagem de bate-papo quando você tem um preço inválido para um item. No entanto, ainda vai mostrar como inválido no registro." -- Needs review
-- L["If checked, whenever you post an item at its normal price, the buyout will be rounded up to the nearest gold."] = ""
-- L["If enabled, instead of not posting when a whitelisted player has an auction posted, Auctioning will match their price."] = ""
L["If you don't have enough items for a full post, it will post with what you have."] = "Se você não tem itens suficientes para uma postagem completa, será postado o que você tem."
-- L["Ignore Low Duration Auctions"] = ""
L["Info"] = "Informações"
L["Invalid scan data for item %s. Skipping this item."] = "Dados de escaneamento inválidos para o item %s. Ignorando este item."
L["Invalid seller data returned by server."] = "Dados de vendedor inválidos retornados pelo servidor."
L["Item"] = "Item"
L["Item/Group is invalid."] = "Item/Grupo inválido."
-- L["Keeping undercut auctions posted."] = ""
-- L["Keep Posted"] = ""
L["Log Info:"] = "Informações de Registro:"
-- L["Low Duration"] = ""
L["Lowest auction by whitelisted player."] = "Menor leilão por jogador da Lista Branca."
L["Lowest Buyout"] = "Menor Arremate"
L["Lowest Buyout:"] = "Menor Arremate:"
L["Macro created and keybinding set!"] = "A Macro foi criada e o atalho foi definido!"
L["Macro Help"] = "Ajuda para Macro"
-- L["Match Stack Size"] = ""
-- L["Match Whitelist Players"] = ""
L["Max Cost:"] = "Custo Máximo:"
L["Max Cost Per Item"] = "Custo Max. por item" -- Needs review
L["Maximum amount already posted."] = "Quantidade máxima já postada."
-- L["Maximum Price"] = ""
-- L["Maximum Price:"] = ""
L["Max Price Per:"] = "Preço Máximo Por:"
L["Max Quantity:"] = "Quantidade Máxima:"
-- L["Max Quantity to Buy"] = ""
-- L["Max Reset Cost"] = ""
L["Minimum Price:"] = "Preço mínimo:" -- Needs review
-- L["Minimum Price (aka Threshold)"] = ""
L["Min Profit:"] = "Lucro Min:"
-- L["Min Reset Profit"] = ""
-- L["Min (%s), Normal (%s), Max (%s)"] = ""
L["Modifiers:"] = "Modificadores:"
-- L["Move AH Shortfall To Bags"] = ""
-- L["Move Group To Bags"] = ""
-- L["Move Group To Bank"] = ""
-- L["Move Non Group Items to Bank"] = ""
-- L["Move Post Cap To Bags"] = ""
L["Must wait for scan to finish before starting to reset."] = "Deve esperar que o escaneamento termine antes de iniciar a redefinição."
-- L["New Operation"] = ""
L["No Items to Reset"] = "Nenhum Item para Redefinir"
L["<none>"] = "<nenhum>"
-- L["No posting."] = ""
-- L["Normal Price:"] = ""
-- L["Normal Price (aka Fallback)"] = ""
-- L["Not canceling."] = ""
L["Not canceling auction at reset price."] = "Não cancelando leilão no preço de redefinição."
-- L["Not canceling auction below min price."] = ""
L["Not enough items in bags."] = "Não há itens suficientes nas bolsas."
-- L["NOTE: You can right click on any of the price settings below to show a window which will help with more advanced price settings such as using a % of another price source."] = ""
-- L["Nothing to Move"] = ""
-- L["Not resetting."] = ""
-- L["Operation"] = ""
-- L["Operation Name"] = ""
-- L["Operations"] = ""
L["Options"] = "Opções"
-- L["Other Auctioning Searches"] = ""
L["Percentage of the buyout as bid, if you set this to 90% then a 100g buyout will have a 90g bid."] = "Porcentagem do arremate como lance, se você definir para 90% então um arremate de 100o terá um lance de 90o."
L["Player name"] = "Nome do jogador"
L["Plays the ready check sound when a post / cancel scan is complete and items are ready to be posting / canceled (the gray bar is all the way across)."] = "Toca o som \"Ready Check\" quando um escaneamento de postagem/cancelamento é completado e os itens estão prontos para serem postado/cancelados (a barra cinza está completa)"
L["Please don't move items around in your bags while a post scan is running! The item was skipped to avoid an incorrect item being posted."] = "Por favor não mova itens nas suas bolsas enquanto um escaneamento de postagem está acontecendo! O item foi ignorado para evitar que um item incorreto fosse postado."
L["Post"] = "Postar"
-- L["Post at Maximum Price"] = ""
-- L["Post at Minimum Price"] = ""
-- L["Post at Normal Price"] = ""
-- L["Post Cap"] = ""
-- L["Posted at whitelisted player's price."] = ""
-- L["Posting at normal price."] = ""
L["Posting at whitelisted player's price."] = "Postando no preço do jogador da lista branca."
L["Posting at your current price."] = "Postando no seu preço atual."
-- L["Posting %d / %d"] = ""
-- L["Posting %d stack(s) of %d for %d hours."] = ""
-- L["Posting Price Settings"] = ""
L["Post Scan Finished"] = "Escaneamento de Postagem Finalizado"
-- L["Post Settings"] = ""
-- L["Preparing Filter %d / %d"] = ""
-- L["Preparing Filters..."] = ""
-- L["Preparing to Move"] = ""
-- L["Price Resolution"] = ""
-- L["Price to post at if there are no auctions up under your maximum price. This includes the case where there's none of an item on the AH."] = ""
L["Processing Items..."] = "Processando os Itens..."
L["Profit:"] = "Lucro:"
L["Profit Per Item"] = "Lucro Por Item"
L["Quantity (Yours)"] = "Quantidade (Seus)"
-- L["Relationships"] = ""
-- L["Repost Higher Threshold"] = ""
-- L["Reset"] = ""
L["Reset Scan Finished"] = "Escaneamento de Redefinição Finalizado"
-- L["Reset Settings"] = ""
-- L["Resetting enabled."] = ""
-- L["Restart"] = ""
L["Return to Summary"] = "Retornar ao Sumário"
L["Right-Click to add %s to your friends list."] = "Clique direito para adicionar %s à sua lista de amigos."
-- L["Round Normal Price"] = ""
L["Running Scan..."] = "Escaneando..."
L["Save New Price"] = "Salvar o Novo Preço"
-- L["Scan Complete!"] = ""
-- L["Scanning %d / %d"] = ""
-- L["Scanning %d / %d (Page %d / %d)"] = ""
L["ScrollWheel Direction (both recommended):"] = "Direção da Roda do Mouse (recomendado ambas):"
-- 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 scan."] = ""
L["Seller"] = "Vendedor"
L["Seller name of lowest auction for item %s was not returned from server. Skipping this item."] = "O nome do vendedor do leilão mais baixo para o item %s não foi retornado pelo servidor. Ignorando este item."
L["'%s' has an Auctioning operation of '%s' which no longer exists."] = "'%s' tem uma operação de venda em leilão de '%s' que não existe mais." -- Needs review
L["'%s' has an Auctioning operation of '%s' which no longer exists. Auctioning will ignore this group until this is fixed."] = "'%s' tem uma operação de venda em leilão de '%s' que não existe mais. Leilão irá ignorar este grupo até que isso seja corrigido." -- Needs review
L["Shift-Right-Click to show the options for this item's Auctioning group."] = "Shift-Clique-Direito para exibir as opções do Leiloando para o grupo deste item."
-- L["Shift-Right-Click to show the options for this operation.|r"] = ""
L["Show All Auctions"] = "Exibir Todos os Leilões"
-- L["Show Auctioning values in Tooltip"] = ""
L["Show Item Auctions"] = "Exibir Leilões do Item"
L["Show Log"] = "Exibir Registro"
L["%s item(s) to buy/cancel"] = "%s item(s) para comprar/cancelar"
L["Skip"] = "Pular"
L["Stack Size"] = "Tamanho da Pilha"
-- L["Start Cancel Scan"] = ""
L["Starting Scan..."] = "Escaniando..." -- Needs review
-- L["Start Post Scan"] = ""
-- L["Start Reset Scan"] = ""
L["Stop"] = "Parar" -- Needs review
L["Target Price"] = "Preço Alvo"
L["Target Price:"] = "Preço Alvo:"
L["The filter cannot be empty. If you'd like to cancel all auctions, use the 'Cancel All Auctions' button."] = "O filtro não pode estar vazio. Se você quer cancelar todos os leilões, use o botão \"Cancelar Todos os Leilões\"." -- Needs review
L["The lowest price you want an item to be posted for. Auctioning will not undercut auctions below this price."] = "O preço minimo que você quer no item a ser publicado. Leilão não vai ser cortado abaixo deste preço." -- Needs review
L["The maximum amount that you want to spend in order to reset a particular item. This is the total amount, not a per-item amount."] = "A quantidade máxima que você deseja gastar a fim de redefinir um item em particular. Esta é a quantia total, não a quantia por item."
L["The maximum price you want an item to be posted for. Auctioning will not undercut auctions above this price."] = "O preço máximo que você quer no item a ser publicado. Leilão não vai ser cortado acima deste preço." -- Needs review
L["The minimum profit you would want to make from doing a reset. This is a per-item price where profit is the price you reset to minus the average price you spent per item."] = "O lucro mínimo que você deseja obter ao realizar uma redefinição. Este é um preço por item onde o lucro é o preço que você redefine menos o preço médio que você gastou por item."
L["There are two ways of making clicking the Post / Cancel Auction button easier. You can put %s and %s in a macro (on separate lines), or use the utility below to have a macro automatically made and bound to scrollwheel for you."] = "Existem duas formas fáceis de clicar no botão Postar / Cancelar Leilão. Você pode colocar %s e %s em uma macro (em linhas separadas), ou usar a ferramenta abaixo para criar uma macro automaticamente e vinculá-la na Roda do Mouse."
L["This determines what size range of prices should be considered a single price point for the reset scan. For example, if this is set to 1s, an auction at 20g50s20c and an auction at 20g49s45c will both be considered to be the same price level."] = "Isto determina qual o tamanho que cada faixa de preços deve ser considerada um ponto de preço único para o escaneamento de redefinição. Por exemplo, se definido para 1p, um leilão em 20o50p20c e um leilão a 20o49p45c serão ambos considerados de mesmo nível de preço."
L["This dropdown determines the default tab when you visit an operation."] = "Esta lista suspensa determina a guia padrão quando você visita uma operação." -- Needs review
-- L["This dropdown determines what Auctioning will do when the market for an item goes below your minimum price. You can either not post the items or post at one of your configured prices."] = ""
L["This is the maximum amount you want to pay for a single item when reseting."] = "Esta é a quantia máxima que você deseja pagar por um único item ao redefinir."
L["This item does not have any seller data."] = "Este item não possui qualquer dado de vendedor."
L["This number of undercut auctions will be kept on the auction house (not canceled) when doing a cancel scan."] = "Este número de leilões cortados será mantido na casa de leilões (não cancelada) ao fazer uma varredura cancelar." -- Needs review
L["Total Cost"] = "Custo Total"
-- L["Under 30min"] = ""
L["Undercut Amount"] = "Valor Cortado" -- Needs review
L["Undercut by whitelisted player."] = "Cortado por um jogador da lista branca."
L["Undercutting competition."] = "Cortando concorrente."
L["Up"] = "Acima"
L["Use Stack Size as Cap"] = "Use Stack Tamanho como Padrão" -- Needs review
L["When Below Threshold (aka Reset Method)"] = "Quando Abaixo do Limite (aka Reset Método)" -- Needs review
L["Whitelist"] = "Lista branca"
L["Whitelists allow you to set other players besides you and your alts that you do not want to undercut; however, if somebody on your whitelist matches your buyout but lists a lower bid it will still consider them undercutting."] = "A Lista Branca permite que você defina outros jogadores além de você e seus alts, os quais não deseja Cortar. Observe que se alguém em sua Lista Branca leiloar um item pelo preço do seu Arremate mas definir um Lance menor que o seu eles continuarão sendo considerados como Cortando o Preço."
L["Will bind ScrollWheelDown (plus modifiers below) to the macro created."] = "Vinculará um atalho a Roda do Mouse para BAIXO (mais modificadores abaixo) à macro criada."
L["Will bind ScrollWheelUp (plus modifiers below) to the macro created."] = "Vinculará um atalho a Roda do Mouse para CIMA (mais modificadores abaixo) à macro criada."
L["Will cancel all your auctions at or below the specified duration, including ones you didn't post with Auctioning."] = "Cancelará todos os seus leilões ou abaixo do período especificado, incluindo aqueles que você não postar com leilões." -- Needs review
L["Will cancel all your auctions, including ones which you didn't post with Auctioning."] = "Cancelará todos os seus leilões, inclusive os que você não postar com leilões." -- Needs review
L["Will cancel all your auctions which match the specified filter, including ones which you didn't post with Auctioning."] = "Cancelará todos os seus leilões que correspondem ao filtro especificado, inclusive as que você não postar com leilões." -- Needs review
L["Will cancel auctions even if they have a bid on them, you will take an additional gold cost if you cancel an auction with bid."] = "Cancelará leilões mesmo que eles tenham um Lance neles, você terá um custo adicional em ouro se cancelar um leilão com lance."
L["You do not have any players on your whitelist yet."] = "Você ainda não tem nenhum jogador na sua Lista Branca."
L["Your auction has not been undercut."] = "Seu leilão não foi cortado."
L["Your Buyout"] = "Sua Oferta" -- Needs review
L["You've been undercut."] = "Você foi cortado."
+273
View File
@@ -0,0 +1,273 @@
-- ------------------------------------------------------------------------------ --
-- TradeSkillMaster_Auctioning --
-- http://www.curse.com/addons/wow/tradeskillmaster_auctioning --
-- --
-- A TradeSkillMaster Addon (http://tradeskillmaster.com) --
-- All Rights Reserved* - Detailed license information included with addon. --
-- ------------------------------------------------------------------------------ --
-- TradeSkillMaster_Auctioning Locale - ruRU
-- Please use the localization app on CurseForge to update this
-- http://wow.curseforge.com/addons/TradeSkillMaster_Auctioning/localization/
local L = LibStub("AceLocale-3.0"):NewLocale("TradeSkillMaster_Auctioning", "ruRU")
if not L then return end
L["2 to 12 hrs"] = "2-12 часов"
L["30min to 2hrs"] = "30мин-2часа"
L["Add a new player to your whitelist."] = "Добавить нового игрока в белый список"
L["Add player"] = "Добавить игрока"
L["Any auctions at or below the selected duration will be ignored. Selecting \"<none>\" will cause no auctions to be ignored based on duration."] = "Все лоты, с длительностью меньше выбранной, будут игнорироваться. Если выбрано \"ничего\", то лоты не будут игнорироваться по длительности."
L["At normal price and not undercut."] = "По норм.цене и не сбит."
L["Auction Buyout"] = "Выкуп"
L["Auction Buyout (Stack Price):"] = "Выкуп (цена стака):"
L["Auction has been bid on."] = "Аукцион был со ставкой."
-- L["Auctioning operations contain settings for posting, canceling, and resetting items in a group. Type the name of the new operation into the box below and hit 'enter' to create a new Crafting operation."] = ""
L["Auctioning Prices:"] = "Цены аукциона:"
L["Auction not found. Skipped."] = "Аукцион не найден. Пропуск."
L["Auction Price Settings"] = "Настройки цены аукциона"
L["Auction Settings"] = "Настройки аукциона"
L["auctions of|r %s"] = "аукцион от|r %s"
L["Below min price, posting at reset price."] = "Ниже мин.цены, выст.по цене сброса"
L["Bid percent"] = "Процент ставки"
L["Cancel"] = "Отмена"
L["Cancel All Auctions"] = "Отмена всех аукционов"
L["Cancel Auctions with Bids"] = "Отмена аукционов со ставками"
L["Cancel Filter:"] = "Фильтр отмены"
L["Canceling all auctions."] = "Отменяю все лоты."
L["Canceling auction which you've undercut."] = "Отмена лотов, у которых вы сбили цену"
L["Canceling %d / %d"] = "Отменяю %d / %d"
L["Canceling to repost at higher price."] = "Отмена, чтобы выставить по более высокой цене"
L["Canceling to repost at reset price."] = "Отмена, чтобы выставить по цене сброса"
L["Canceling to repost higher."] = "Отменяю для выставления дороже"
L["Canceling undercut auctions."] = "Отменяю сбитых аукционов"
L["Canceling undercut auctions and to repost higher."] = "Отменяю сбитые аукционы, чтобы выставить дороже"
L["Cancel Low Duration"] = "Отмена ниже длительности"
L["Cancel Scan Finished"] = "Отмена сканирования завершена"
L["Cancel Settings"] = "Настройки отмены"
L["Cancel to Repost Higher"] = "Отменить для выставления дороже"
L["Cancel Undercut Auctions"] = "Отменить сбитые аукционы"
L["Cheapest auction below min price."] = "Аукцион ниже мин.цены"
L["Click to show auctions for this item."] = "Нажмите для показа лотов по предмету"
L["Confirming %d / %d"] = "Подтверждение %d / %d"
L["Create Macro and Bind ScrollWheel (with selected options)"] = "Создать макрос и забиндить его на колесико мыши (с выбранными модификаторами)"
L["Currently Owned:"] = "Сейчас относится к:"
L["Default Operation Tab"] = "Закладка операции по умолчанию"
L["Delete"] = "Удалить"
-- L["Did not cancel %s because your cancel to repost threshold (%s) is invalid. Check your settings."] = ""
L["Did not cancel %s because your maximum price (%s) is invalid. Check your settings."] = "%s не было отменено, потому что ваша максимальная цена(%s) не верна. Проверьте настройки." -- Needs review
L["Did not cancel %s because your maximum price (%s) is lower than your minimum price (%s). Check your settings."] = "%s не было отменено, потому что ваша максимальная цена(%s) меньше минимальной(%s). Проверьте настройки." -- Needs review
L["Did not cancel %s because your minimum price (%s) is invalid. Check your settings."] = "%s не было отменено, потому что ваша минимальная цена(%s) не верна. Проверьте настройки." -- Needs review
L["Did not cancel %s because your normal price (%s) is invalid. Check your settings."] = "%s не было отменено, потому что ваша нормальная цена(%s) не верна. Проверьте настройки." -- Needs review
-- L["Did not cancel %s because your normal price (%s) is lower than your minimum price (%s). Check your settings."] = ""
-- L["Did not post %s because your maximum price (%s) is invalid. Check your settings."] = ""
-- L["Did not post %s because your maximum price (%s) is lower than your minimum price (%s). Check your settings."] = ""
-- L["Did not post %s because your minimum price (%s) is invalid. Check your settings."] = ""
-- L["Did not post %s because your normal price (%s) is invalid. Check your settings."] = ""
-- L["Did not post %s because your normal price (%s) is lower than your minimum price (%s). Check your settings."] = ""
-- L["Did not reset %s because your maximum price (%s) is invalid. Check your settings."] = ""
-- L["Did not reset %s because your maximum price (%s) is lower than your minimum price (%s). Check your settings."] = ""
-- L["Did not reset %s because your minimum price (%s) is invalid. Check your settings."] = ""
-- L["Did not reset %s because your normal price (%s) is invalid. Check your settings."] = ""
-- L["Did not reset %s because your normal price (%s) is lower than your minimum price (%s). Check your settings."] = ""
-- L["Did not reset %s because your reset max cost (%s) is invalid. Check your settings."] = ""
-- L["Did not reset %s because your reset max item cost (%s) is invalid. Check your settings."] = ""
-- L["Did not reset %s because your reset min profit (%s) is invalid. Check your settings."] = ""
-- L["Did not reset %s because your reset resolution (%s) is invalid. Check your settings."] = ""
L["Disable Invalid Price Warnings"] = "Отключить предупреждения неправильной цены"
L["Done Canceling"] = "Отмена завершена"
L["Done Posting"] = "Выставление лотов закончено"
L[ [=[Done Posting
Total value of your auctions: %s
Incoming Gold: %s]=] ] = [=[Выставлено
Общая стоимость ваших аукционов: %s
Поступит золота: %s]=]
L["Done Scanning"] = "Отсканировано"
L[ [=[Done Scanning!
Could potentially reset %d items for %s profit.]=] ] = [=[Отсканировано!
Потенциально можно сбросить %d предметов для %s получения прибыли.]=]
L["Don't Post Items"] = "Не выставлять товар"
L["Down"] = "Вниз"
L["Duration"] = "Продолжительность"
L["Edit Post Price"] = "Изменить цену"
L["Enable Reset Scan"] = "Включить скан сброса"
L["Enable Sounds"] = "Включить звуки"
L["Error creating operation. Operation with name '%s' already exists."] = "Ошибка создания операции. Операция с именем '%s' уже существует."
L["General"] = "Общие"
L["General Operation Options"] = "Основные опции операции"
L["General Options"] = "Основные опции"
L["General Reset Settings"] = "Основные опции сброса"
L["General Settings"] = "Основные настройки"
L["Give the new operation a name. A descriptive name will help you find this operation later."] = "Укажите новое имя для операции. Правильное название поможет вам найти эту операцию позже."
L["Help"] = "Помощь"
L["How long auctions should be up for."] = "Сколько должен длиться аукцион."
-- L["How many auctions at the lowest price tier can be up at any one time. Setting this to 0 disables posting for any groups this operation is applied to."] = ""
L["How many items should be in a single auction, 20 will mean they are posted in stacks of 20."] = "Количество товаров в связке. 20 обозначает, что товары будут выставляться связками по 20 штук."
-- L["How much to undercut other auctions by. Format is in \"#g#s#c\". For example, \"50g30s\" means 50 gold, 30 silver, and no copper."] = ""
-- L["If an item can't be posted for at least this amount higher than its current value, it won't be canceled to repost higher."] = ""
-- L["If checked, a cancel scan will cancel any auctions which can be reposted for a higher price."] = ""
-- L["If checked, a cancel scan will cancel any auctions which have been undercut and are still above your threshold."] = ""
-- L["If checked, Auctioning will ignore all auctions that are posted at a different stack size than your auctions. For example, if there are stacks of 1, 5, and 20 up and you're posting in stacks of 1, it'll ignore all stacks of 5 and 20."] = ""
-- L["If checked, groups which the opperation applies to will be included in a reset scan."] = ""
-- L["If checked, the minimum, normal and maximum prices of the first operation for the item will be shown in tooltips."] = ""
-- L["If checked, TSM will not print out a chat message when you have an invalid price for an item. However, it will still show as invalid in the log."] = ""
-- L["If checked, whenever you post an item at its normal price, the buyout will be rounded up to the nearest gold."] = ""
-- L["If enabled, instead of not posting when a whitelisted player has an auction posted, Auctioning will match their price."] = ""
L["If you don't have enough items for a full post, it will post with what you have."] = "Если у вас недостаточно товаров для полного выставления, будет выставлено сколько есть."
L["Ignore Low Duration Auctions"] = "Игнорировать аукционы длительностью ниже"
L["Info"] = "Инфо"
L["Invalid scan data for item %s. Skipping this item."] = "Ошибка скана данных для предмета %s. Пропускаю его."
L["Invalid seller data returned by server."] = "Сервер вернул неверные данные о продавце."
L["Item"] = "Товар"
L["Item/Group is invalid."] = "Товар/Группа неверна."
L["Keeping undercut auctions posted."] = "Оставляю подрезанные аукционы."
L["Keep Posted"] = "Оставить выставленными"
L["Log Info:"] = "Лог:"
L["Low Duration"] = "Длительность ниже..."
L["Lowest auction by whitelisted player."] = "Самые дешёвые лоты у игрока из белого списка."
L["Lowest Buyout"] = "Мин. выкуп"
L["Lowest Buyout:"] = "Мин. выкуп:"
L["Macro created and keybinding set!"] = "Макрос создан и назначен!"
L["Macro Help"] = "Помощь по макросам"
L["Match Stack Size"] = "Только по размеру стака"
L["Match Whitelist Players"] = "Соотносить с игроками из белого списка"
L["Max Cost:"] = "Макс.стоимость"
L["Max Cost Per Item"] = "Макс.стоимость за ед."
L["Maximum amount already posted."] = "Макс. количество товара уже выставлено"
L["Maximum Price"] = "Макс.цена"
L["Maximum Price:"] = "Макс.цена:"
L["Max Price Per:"] = "Макс.цена/ед:"
L["Max Quantity:"] = "Макс.кол-во:"
L["Max Quantity to Buy"] = "Макс.кол-во для покупки"
L["Max Reset Cost"] = "Макс.стоимость сброса"
L["Minimum Price:"] = "Мин.цена:"
L["Minimum Price (aka Threshold)"] = "Мин.цена (порог)"
L["Min Profit:"] = "Мин.прибыль:"
L["Min Reset Profit"] = "Мин.прибыль сброса"
L["Min (%s), Normal (%s), Max (%s)"] = "Мин (%s), Норм (%s), Макс (%s)"
L["Modifiers:"] = "Модификаторы:"
L["Move AH Shortfall To Bags"] = "Переместить нехватку аука в сумки"
L["Move Group To Bags"] = "Переместить группу в сумки"
L["Move Group To Bank"] = "Переместить группу в банк"
L["Move Non Group Items to Bank"] = "Переместить предметы без групп в банк"
L["Move Post Cap To Bags"] = "Переместить предел выставления в сумки"
L["Must wait for scan to finish before starting to reset."] = "Нужно дождаться завершения сканирования, прежде чем начинать перепродажу."
L["New Operation"] = "Новая операция"
L["No Items to Reset"] = "Нет товара для сброса"
L["<none>"] = "<ничего>"
L["No posting."] = "Не выставлено."
L["Normal Price:"] = "Норм.цена:"
L["Normal Price (aka Fallback)"] = "Норм.цена (резерв)"
L["Not canceling."] = "Не отменяю."
L["Not canceling auction at reset price."] = "Не отменять аукцион при сбросе цены."
L["Not canceling auction below min price."] = "Не отменять аукцион ниже мин.цены"
L["Not enough items in bags."] = "Не хватает товара в сумках."
L["NOTE: You can right click on any of the price settings below to show a window which will help with more advanced price settings such as using a % of another price source."] = "ПРИМЕЧАНИЕ.: Вы можете нажать ПКМ на любую настройку цены ниже, чтобы отобразить окно с подсказкой об использовании расширенных настроек цены, таких как % от другого источника цены."
L["Nothing to Move"] = "Нечего перемещать."
L["Not resetting."] = "Не сбрасываю."
L["Operation"] = "Операция"
L["Operation Name"] = "Имя операции"
L["Operations"] = "Операции"
L["Options"] = "Настройки"
L["Other Auctioning Searches"] = "Другие поиски аукционов"
L["Percentage of the buyout as bid, if you set this to 90% then a 100g buyout will have a 90g bid."] = "Процентный размер ставки от выкупа. Если установить в 90%, лот с выкупом в 100з будет иметь ставку 90з."
L["Player name"] = "Имя персонажа"
L["Plays the ready check sound when a post / cancel scan is complete and items are ready to be posting / canceled (the gray bar is all the way across)."] = "Проигрывать звук \"Проверка готовности\" когда сканирование завершено и можно выставлять / отменять лоты."
L["Please don't move items around in your bags while a post scan is running! The item was skipped to avoid an incorrect item being posted."] = "Пожалуйста, не перемещайте предметы в ваших сумках, пока идет сканирование! Выставление предмета было пропущено, чтобы избежать неправильного выставления." -- Needs review
L["Post"] = "Выст."
L["Post at Maximum Price"] = "Выст.по макс.цене"
L["Post at Minimum Price"] = "Выст.по мин.цене"
L["Post at Normal Price"] = "Выст.по норм.цене"
L["Post Cap"] = "Выст.макс."
L["Posted at whitelisted player's price."] = "Выставлено по цене игрока в белом списке"
L["Posting at normal price."] = "Выставить по норм.цене"
L["Posting at whitelisted player's price."] = "Выставить по цене игрока в белом списке"
L["Posting at your current price."] = "Выставить по вашей текущей цене"
L["Posting %d / %d"] = "Выставление %d / %d"
L["Posting %d stack(s) of %d for %d hours."] = "Выставление %d стак(ов) %d на %d часов"
L["Posting Price Settings"] = "Настройки цены выставления"
L["Post Scan Finished"] = "Выставление лотов завершено"
L["Post Settings"] = "Настройки выставления"
L["Preparing Filter %d / %d"] = "Подготовка фильтра %d / %d"
L["Preparing Filters..."] = "Подготовка фильтров..."
L["Preparing to Move"] = "Подготовка перемещения"
L["Price Resolution"] = "Разрешение цены"
-- L["Price to post at if there are no auctions up under your maximum price. This includes the case where there's none of an item on the AH."] = ""
L["Processing Items..."] = "Обработка товаров..."
L["Profit:"] = "Прибыль:"
L["Profit Per Item"] = "Прибыль в расчете на товар"
L["Quantity (Yours)"] = "Количество (ваши)"
L["Relationships"] = "Связи"
L["Repost Higher Threshold"] = "Перевыставить выше порога"
L["Reset"] = "Сброс"
L["Reset Scan Finished"] = "Сканирование на перепродажу завершено"
L["Reset Settings"] = "Настройки сброса"
L["Resetting enabled."] = "Сброс включен."
L["Restart"] = "Заново"
L["Return to Summary"] = "Вернуться к итогу"
L["Right-Click to add %s to your friends list."] = "ПКМ, чтобы добавить %s в ваш список друзей"
L["Round Normal Price"] = "Округлять норм.цену"
L["Running Scan..."] = "Запуск скана..."
L["Save New Price"] = "Сохр.новую цену"
L["Scan Complete!"] = "Скан завершен!"
L["Scanning %d / %d"] = "Скан %d / %d"
L["Scanning %d / %d (Page %d / %d)"] = "Скан %d / %d (стр %d / %d)"
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 scan."] = "Выберите группы, которые включить в скан."
L["Seller"] = "Продавец"
L["Seller name of lowest auction for item %s was not returned from server. Skipping this item."] = "Сервер не возвратил имя продавца, выставившего самый дешевый лот %s. Пропускаю предмет."
L["'%s' has an Auctioning operation of '%s' which no longer exists."] = "'%s' имеет операцию '%s' в Auctioning, которая больше не существует." -- Needs review
L["'%s' has an Auctioning operation of '%s' which no longer exists. Auctioning will ignore this group until this is fixed."] = "'%s' имеет операцию '%s' в Auctioning, которая больше не существует. Auctioning будет игнорировать эту группу, пока не будет исправлено." -- Needs review
L["Shift-Right-Click to show the options for this item's Auctioning group."] = "Shift-Правый-Клик - посмотреть опции Auctioning группы для этого предмета." -- Needs review
-- L["Shift-Right-Click to show the options for this operation.|r"] = ""
L["Show All Auctions"] = "Показать все аукционы"
L["Show Auctioning values in Tooltip"] = "Показывать значения аукциона в подсказке"
L["Show Item Auctions"] = "Показ лота аукциона"
L["Show Log"] = "Показать лог"
L["%s item(s) to buy/cancel"] = "%s товаров для покупки/отмены."
L["Skip"] = "Пропуск"
L["Stack Size"] = "Размер связки"
L["Start Cancel Scan"] = "Скан на отмену"
L["Starting Scan..."] = "Начать скан..."
L["Start Post Scan"] = "Скан на выставление"
L["Start Reset Scan"] = "Скан на перепродажу"
L["Stop"] = "Стоп"
L["Target Price"] = "Целевая цена"
L["Target Price:"] = "Целевая цена:"
-- L["The filter cannot be empty. If you'd like to cancel all auctions, use the 'Cancel All Auctions' button."] = ""
-- L["The lowest price you want an item to be posted for. Auctioning will not undercut auctions below this price."] = ""
L["The maximum amount that you want to spend in order to reset a particular item. This is the total amount, not a per-item amount."] = "Максимальное количество, которое вы хотите потратить для сброса конкретного предмета. Это общее значение, а не на один предмет." -- Needs review
-- L["The maximum price you want an item to be posted for. Auctioning will not undercut auctions above this price."] = ""
L["The minimum profit you would want to make from doing a reset. This is a per-item price where profit is the price you reset to minus the average price you spent per item."] = "Минимальная прибыль, которую вы хотите получить со сброса. Это стоимость каждого предмета, где прибыль - цена, которую вы сбрасываете минус средняя цена, которую вы тратите за предмет." -- Needs review
L["There are two ways of making clicking the Post / Cancel Auction button easier. You can put %s and %s in a macro (on separate lines), or use the utility below to have a macro automatically made and bound to scrollwheel for you."] = "Существует два способа облегчить нажатие кнопки выставления / отмены лота. Вы можете сделать макрос с %s и %s в отдельных строчках, или воспользоваться окошком снизу для автоматического создания и назначения макроса."
-- L["This determines what size range of prices should be considered a single price point for the reset scan. For example, if this is set to 1s, an auction at 20g50s20c and an auction at 20g49s45c will both be considered to be the same price level."] = ""
-- L["This dropdown determines the default tab when you visit an operation."] = ""
-- L["This dropdown determines what Auctioning will do when the market for an item goes below your minimum price. You can either not post the items or post at one of your configured prices."] = ""
L["This is the maximum amount you want to pay for a single item when reseting."] = "Максимальное количество, которые вы хотите потратить на один предмет, когда сбрасываете." -- Needs review
L["This item does not have any seller data."] = "У этого предмета нет информации о продавцах." -- Needs review
-- L["This number of undercut auctions will be kept on the auction house (not canceled) when doing a cancel scan."] = ""
L["Total Cost"] = "Общая стоимость"
L["Under 30min"] = "менее 30мин"
L["Undercut Amount"] = "Сумма подрезки"
L["Undercut by whitelisted player."] = "Подрезан игроком из белого списка"
L["Undercutting competition."] = "Жестокая конкуренция"
L["Up"] = "Вверх"
L["Use Stack Size as Cap"] = "Использовать размер стака как предел"
L["When Below Threshold (aka Reset Method)"] = "Когда ниже порога (метод сброса)"
L["Whitelist"] = "Белый список"
L["Whitelists allow you to set other players besides you and your alts that you do not want to undercut; however, if somebody on your whitelist matches your buyout but lists a lower bid it will still consider them undercutting."] = "Белые списки позволяют выбрать игроков, отличных от вас и ваших альтов, которым вы не хотите сбивать цену. Тем не менее, если кто-то из вашего белого списка выставляет лот с таким же выкупом, но более низкой ставкой, он будет всё равно считаться сбивающим цену."
L["Will bind ScrollWheelDown (plus modifiers below) to the macro created."] = "Назначит макрос на вращение колесика мыши вниз (с модификаторами, выбранными снизу) "
L["Will bind ScrollWheelUp (plus modifiers below) to the macro created."] = "Назначит макрос на вращение колесика мыши вверх (с модификаторами, выбранными снизу) "
L["Will cancel all your auctions at or below the specified duration, including ones you didn't post with Auctioning."] = "Будут отменены все ваши аукционы, ниже определенной длительности, включая те, которые вы не выставляли через Auctioning." -- Needs review
-- L["Will cancel all your auctions, including ones which you didn't post with Auctioning."] = ""
-- L["Will cancel all your auctions which match the specified filter, including ones which you didn't post with Auctioning."] = ""
L["Will cancel auctions even if they have a bid on them, you will take an additional gold cost if you cancel an auction with bid."] = "Будет отменять лоты, даже если на них сделана ставка. Это стоит дополнительных денег."
L["You do not have any players on your whitelist yet."] = "В белом списке пока никого нет."
L["Your auction has not been undercut."] = "Ваш лот не сбит."
L["Your Buyout"] = "Ваш выкуп"
L["You've been undercut."] = "Ваш лот сбит."
+274
View File
@@ -0,0 +1,274 @@
-- ------------------------------------------------------------------------------ --
-- TradeSkillMaster_Auctioning --
-- http://www.curse.com/addons/wow/tradeskillmaster_auctioning --
-- --
-- A TradeSkillMaster Addon (http://tradeskillmaster.com) --
-- All Rights Reserved* - Detailed license information included with addon. --
-- ------------------------------------------------------------------------------ --
-- TradeSkillMaster_Auctioning Locale - zhCN
-- Please use the localization app on CurseForge to update this
-- http://wow.curseforge.com/addons/TradeSkillMaster_Auctioning/localization/
local L = LibStub("AceLocale-3.0"):NewLocale("TradeSkillMaster_Auctioning", "zhCN")
if not L then return end
L["2 to 12 hrs"] = "2到12小时"
L["30min to 2hrs"] = "30分钟到2小时"
L["Add a new player to your whitelist."] = "新添角色名到白名单。"
L["Add player"] = "添加角色"
L["Any auctions at or below the selected duration will be ignored. Selecting \"<none>\" will cause no auctions to be ignored based on duration."] = "低于该持续时间的拍卖品将被忽略。选择'<无>'将不会在持续时间上忽略任何拍卖品。"
L["At normal price and not undercut."] = "处于正常价格且未被压价"
L["Auction Buyout"] = "一口价"
L["Auction Buyout (Stack Price):"] = "一口价(堆叠):"
L["Auction has been bid on."] = "竞标已被接受。"
L["Auctioning operations contain settings for posting, canceling, and resetting items in a group. Type the name of the new operation into the box below and hit 'enter' to create a new Crafting operation."] = "Auctioning 操作包括设置发布, 取消和转卖分组中的物品. 在下边的文本框输入新操作的名称并单击回车创建一个新的制作操作"
L["Auctioning Prices:"] = "拍卖价格:"
L["Auction not found. Skipped."] = "拍卖品未找到. 已跳过"
L["Auction Price Settings"] = "拍卖价格设置"
L["Auction Settings"] = "拍卖设置"
L["auctions of|r %s"] = "拍卖品|r %s"
L["Below min price, posting at reset price."] = "低于最低价,以转卖价发布。"
L["Bid percent"] = "竞价百分比"
L["Cancel"] = "取消"
L["Cancel All Auctions"] = "取消所有拍卖"
L["Cancel Auctions with Bids"] = "取消被竞标的拍卖"
L["Cancel Filter:"] = "取消拍卖筛选:"
L["Canceling all auctions."] = "取消所有拍卖。"
L["Canceling auction which you've undercut."] = "取消被压价的商品"
L["Canceling %d / %d"] = "取消中 %d / %d"
L["Canceling to repost at higher price."] = "取消拍卖以便以更高的价格发布。"
L["Canceling to repost at reset price."] = "取消拍卖以回跌价发布。"
L["Canceling to repost higher."] = "取消以更高价发布。"
L["Canceling undercut auctions."] = "取消被压的拍卖。"
L["Canceling undercut auctions and to repost higher."] = "取消被压的拍卖并以更高价发布。"
L["Cancel Low Duration"] = "取消持续时间为短的"
L["Cancel Scan Finished"] = "取消拍卖扫描完毕。"
L["Cancel Settings"] = "取消拍卖设置"
L["Cancel to Repost Higher"] = "取消以更高价发布"
L["Cancel Undercut Auctions"] = "取消被压的拍卖"
L["Cheapest auction below min price."] = "低于最低价的最便宜的拍卖。"
L["Click to show auctions for this item."] = "点击显示这个物品的拍卖。"
L["Confirming %d / %d"] = "确认 %d / %d"
L["Create Macro and Bind ScrollWheel (with selected options)"] = [=[创建宏并绑定鼠标滚轮(与选定的选项)
]=]
L["Currently Owned:"] = "当前拥有:"
L["Default Operation Tab"] = "默认操作标签"
L["Delete"] = "删除"
L["Did not cancel %s because your cancel to repost threshold (%s) is invalid. Check your settings."] = "没有取消%s,因为重新发布门槛设置(%s)不正确,请检查拍卖设置。"
L["Did not cancel %s because your maximum price (%s) is invalid. Check your settings."] = "没有取消%s,因为最高价(%s)不正确,请检查拍卖设置。"
L["Did not cancel %s because your maximum price (%s) is lower than your minimum price (%s). Check your settings."] = "没有取消%s,因为最高价(%s)低于最低价(%s),请检查拍卖设置。"
L["Did not cancel %s because your minimum price (%s) is invalid. Check your settings."] = "没有取消%s,因为最低价(%s)不正确,请检查拍卖设置。"
L["Did not cancel %s because your normal price (%s) is invalid. Check your settings."] = "没有取消%s,因为正常价 (%s)不正确,请检查拍卖设置。"
L["Did not cancel %s because your normal price (%s) is lower than your minimum price (%s). Check your settings."] = "没有取消%s,因为正常价(%s)低于最低价(%s),请检查拍卖设置。"
L["Did not post %s because your maximum price (%s) is invalid. Check your settings."] = "没有发布%s,因为最高价(%s)不正确,请检查拍卖设置。"
L["Did not post %s because your maximum price (%s) is lower than your minimum price (%s). Check your settings."] = "没有发布%s,因为最高价(%s)低于最低价(%s),请检查拍卖设置。"
L["Did not post %s because your minimum price (%s) is invalid. Check your settings."] = "无法发布%s,因为最低价(%s)不正确,请检查拍卖设置。"
L["Did not post %s because your normal price (%s) is invalid. Check your settings."] = "无法发布%s,因为正常价(%s)不正确,请检查拍卖设置。"
L["Did not post %s because your normal price (%s) is lower than your minimum price (%s). Check your settings."] = "无法发布%s,因为正常价(%s)低于最低价(%s),请检查拍卖设置。"
L["Did not reset %s because your maximum price (%s) is invalid. Check your settings."] = "无法转卖%s,因为最高价(%s)不正确,请检查拍卖设置。"
L["Did not reset %s because your maximum price (%s) is lower than your minimum price (%s). Check your settings."] = "无法转卖%s,因为最高价(%s)低于最低价(%s),请检查拍卖设置。"
L["Did not reset %s because your minimum price (%s) is invalid. Check your settings."] = "无法转卖%s, 因为最低价(%s)不正确,请检查拍卖设置。"
L["Did not reset %s because your normal price (%s) is invalid. Check your settings."] = "无法转卖%s, 因为正常价(%s)不正确,请检查拍卖设置。"
L["Did not reset %s because your normal price (%s) is lower than your minimum price (%s). Check your settings."] = "无法转卖%s, 因为正常价(%s)低于最低价(%s),请检查拍卖设置。"
L["Did not reset %s because your reset max cost (%s) is invalid. Check your settings."] = "无法转卖%s, 因为转卖最高花费(%s)不正确,请检查拍卖设置。"
L["Did not reset %s because your reset max item cost (%s) is invalid. Check your settings."] = "无法转卖%s, 因为单件转卖最高花费(%s)不正确,请检查拍卖设置。"
L["Did not reset %s because your reset min profit (%s) is invalid. Check your settings."] = "无法转卖%s, 因为转卖最低利润(%s)不正确,请检查拍卖设置。"
L["Did not reset %s because your reset resolution (%s) is invalid. Check your settings."] = "无法转卖%s, 因为转卖方案(%s)不正确,请检查拍卖设置。"
L["Disable Invalid Price Warnings"] = "禁用无效价格警告"
L["Done Canceling"] = "取消拍卖完成"
L["Done Posting"] = "发布完成"
L[ [=[Done Posting
Total value of your auctions: %s
Incoming Gold: %s]=] ] = [=[开始发布
您的拍卖总价值: %s
收入金币: %s]=]
L["Done Scanning"] = "扫描完成"
L[ [=[Done Scanning!
Could potentially reset %d items for %s profit.]=] ] = [=[开始扫描!
可从新发布物品 %d 可以得到利润 %s 。]=]
L["Don't Post Items"] = "不发布物品"
L["Down"] = ""
L["Duration"] = "持续时间"
L["Edit Post Price"] = "编辑发布价格"
L["Enable Reset Scan"] = "启用转卖扫描"
L["Enable Sounds"] = "启用声音"
L["Error creating operation. Operation with name '%s' already exists."] = "创建操作失败, 操作'%s'已经存在。"
L["General"] = "常规"
L["General Operation Options"] = "常规操作选项"
L["General Options"] = "通用选项"
L["General Reset Settings"] = "常规转卖设置"
L["General Settings"] = "常规设定"
L["Give the new operation a name. A descriptive name will help you find this operation later."] = "为新操作命名,一个描述性的名称将方便您找到它。"
L["Help"] = "帮助"
L["How long auctions should be up for."] = "拍卖持续时间。"
L["How many auctions at the lowest price tier can be up at any one time. Setting this to 0 disables posting for any groups this operation is applied to."] = "发布商品的数量上限。设置为0时会使任何应用此操作的分组无法发布拍卖。"
L["How many items should be in a single auction, 20 will mean they are posted in stacks of 20."] = "一次拍卖发布多少个物品,20意味着物品将以20个为堆叠发布."
L["How much to undercut other auctions by. Format is in \"#g#s#c\". For example, \"50g30s\" means 50 gold, 30 silver, and no copper."] = "物品压价金额的格式为'#g#s#c', 比如: \"50g30s\"表示50金30银0铜"
L["If an item can't be posted for at least this amount higher than its current value, it won't be canceled to repost higher."] = "如果一个物品不能被重新发布高于其当前价格,它不会被取消以更高价发布。"
L["If checked, a cancel scan will cancel any auctions which can be reposted for a higher price."] = "如果勾选, 取消拍卖扫描会取消所有可以以更高价格重新拍卖的物品"
L["If checked, a cancel scan will cancel any auctions which have been undercut and are still above your threshold."] = "如果勾选, 取消拍卖扫描会取消所有被压价但仍高于你的门槛价的物品"
L["If checked, Auctioning will ignore all auctions that are posted at a different stack size than your auctions. For example, if there are stacks of 1, 5, and 20 up and you're posting in stacks of 1, it'll ignore all stacks of 5 and 20."] = "如果勾选, Auctioning 会忽略所有和你设定堆叠数量不同的拍卖品, 比如: 拍卖行有堆叠为1.5.20的物品, 而你设定的拍卖堆叠是1, 那么堆叠为5和20的拍卖品会被忽略"
L["If checked, groups which the opperation applies to will be included in a reset scan."] = "如果勾选,转卖扫描中将包括应用了操作的分组。"
L["If checked, the minimum, normal and maximum prices of the first operation for the item will be shown in tooltips."] = "如果勾选,物品的第一操作中的最低/正常/最高价格将显示在鼠标提示上。"
L["If checked, TSM will not print out a chat message when you have an invalid price for an item. However, it will still show as invalid in the log."] = "如果勾选,TSM将不会在聊天框上显示\"无效的物品价格\"信息,但是会记录在日志中。"
L["If checked, whenever you post an item at its normal price, the buyout will be rounded up to the nearest gold."] = "如果勾选,当您以正常价格发布一件拍卖物品时,一口价会被向上取整变为整金形式(例:9g30s30c→10g)。"
L["If enabled, instead of not posting when a whitelisted player has an auction posted, Auctioning will match their price."] = "如果启用,当最低的拍卖是您白名单上的人,将以相同的价格发布拍卖。如果禁用,将不会再发布物品。"
L["If you don't have enough items for a full post, it will post with what you have."] = "如果您拥有商品数量不支持全额发布,那么将以您拥有数量发布。"
L["Ignore Low Duration Auctions"] = "忽略持续时间为短的拍卖品"
L["Info"] = "信息"
L["Invalid scan data for item %s. Skipping this item."] = "物品 %s的扫描数据无效,跳过此物品。"
L["Invalid seller data returned by server."] = "服务器返回拍卖者数据无效"
L["Item"] = "物品"
L["Item/Group is invalid."] = "物品/分组 无效"
L["Keeping undercut auctions posted."] = "保留被压价的拍卖品。"
L["Keep Posted"] = "保留拍卖"
L["Log Info:"] = "日志信息:"
L["Low Duration"] = "持续时间:短"
L["Lowest auction by whitelisted player."] = "最低价格拍卖品为白名单玩家"
L["Lowest Buyout"] = "最低一口价"
L["Lowest Buyout:"] = "最低一口价:"
L["Macro created and keybinding set!"] = "宏的创建和绑定按键设置!"
L["Macro Help"] = "宏命令帮助"
L["Match Stack Size"] = "匹配堆叠数量"
L["Match Whitelist Players"] = "匹配白名单玩家"
L["Max Cost:"] = "最高花费:"
L["Max Cost Per Item"] = "单件物品最高花费"
L["Maximum amount already posted."] = "已发布最大数量。"
L["Maximum Price"] = "最高价格"
L["Maximum Price:"] = "最高价格"
L["Max Price Per:"] = "最高单价:"
L["Max Quantity:"] = "最大数量:"
L["Max Quantity to Buy"] = "最大购买数量"
L["Max Reset Cost"] = "最大转卖花费"
L["Minimum Price:"] = "最低价格:"
L["Minimum Price (aka Threshold)"] = "最低价格(即门槛价)"
L["Min Profit:"] = "最低利润:"
L["Min Reset Profit"] = "最低转卖利润"
L["Min (%s), Normal (%s), Max (%s)"] = "最低(%s), 正常(%s), 最高(%s)"
L["Modifiers:"] = "功能键:"
L["Move AH Shortfall To Bags"] = "移动拍卖行缺少物品到背包"
L["Move Group To Bags"] = "移动分组物品到背包"
L["Move Group To Bank"] = "移动分组物品到银行"
L["Move Non Group Items to Bank"] = "移动未分组物品到银行"
L["Move Post Cap To Bags"] = "移动最大发布量到背包"
L["Must wait for scan to finish before starting to reset."] = "转卖前必须等待扫描结束。"
L["New Operation"] = "新操作"
L["No Items to Reset"] = "无转卖物品"
L["<none>"] = "<无>"
L["No posting."] = "未发布。"
L["Normal Price:"] = "正常价格:"
L["Normal Price (aka Fallback)"] = "正常价格(即回跌价)"
L["Not canceling."] = "没有取消。"
L["Not canceling auction at reset price."] = "不取消位于转卖价格的拍卖。"
L["Not canceling auction below min price."] = "低于最低价格时不取消拍卖"
L["Not enough items in bags."] = "背包中没有足够的物品。"
L["NOTE: You can right click on any of the price settings below to show a window which will help with more advanced price settings such as using a % of another price source."] = "提示:你可以右击下边任意一个价格设置打开高级价格设定窗口, 可以进行例如使用其他资源百分比价格等操作"
L["Nothing to Move"] = "没有物品可以移动"
L["Not resetting."] = "没有转卖。"
L["Operation"] = "操作"
L["Operation Name"] = "操作名称"
L["Operations"] = "操作"
L["Options"] = "选项"
L["Other Auctioning Searches"] = "其他拍卖搜索"
L["Percentage of the buyout as bid, if you set this to 90% then a 100g buyout will have a 90g bid."] = "竞标价相对于一口价的百分比.如果您设置为90%,那么一口价为100g的商品的竞标价为90g。"
L["Player name"] = "角色名"
L["Plays the ready check sound when a post / cancel scan is complete and items are ready to be posting / canceled (the gray bar is all the way across)."] = "在扫描完 准备发布/取消发布 的商品的时候,播放检查完成的声音特效。"
L["Please don't move items around in your bags while a post scan is running! The item was skipped to avoid an incorrect item being posted."] = "发布物品过程中请不要进行背包整理,如果进行背包整理,那么被移动过的物品将不会发布以防止物品以错误的价格发布"
L["Post"] = "发布"
L["Post at Maximum Price"] = "以最高价格发布"
L["Post at Minimum Price"] = "以最低价格发布"
L["Post at Normal Price"] = "以正常价格发布"
L["Post Cap"] = "发布上限"
L["Posted at whitelisted player's price."] = "以白名单玩家价格发布"
L["Posting at normal price."] = "正在以正常价格发布。"
L["Posting at whitelisted player's price."] = "根据白名单玩家价格发布"
L["Posting at your current price."] = "根据最近价格发布。"
L["Posting %d / %d"] = "发布中 %d/%d"
L["Posting %d stack(s) of %d for %d hours."] = "发布%d个堆叠的%d,持续时间为%d小时。"
L["Posting Price Settings"] = "发布价格设置"
L["Post Scan Finished"] = "发布扫描完成"
L["Post Settings"] = "发布设置"
L["Preparing Filter %d / %d"] = "准备筛选 %d / %d"
L["Preparing Filters..."] = "准备筛选中..."
L["Preparing to Move"] = "准备移动中..."
L["Price Resolution"] = "价格分辨率"
L["Price to post at if there are no auctions up under your maximum price. This includes the case where there's none of an item on the AH."] = "当拍卖行物品高于你的最高价格时以此价格发布. 包括拍卖行没有该物品的情况"
L["Processing Items..."] = "处理中…"
L["Profit:"] = "利润:"
L["Profit Per Item"] = "每件物品利润"
L["Quantity (Yours)"] = "数量(您的)"
L["Relationships"] = "关联"
L["Repost Higher Threshold"] = "重新发布的更高价位"
L["Reset"] = "转卖"
L["Reset Scan Finished"] = "重新发布扫描已完成"
L["Reset Settings"] = "转卖设置"
L["Resetting enabled."] = "启用转卖。"
L["Restart"] = "重新开始"
L["Return to Summary"] = "返回总览"
L["Right-Click to add %s to your friends list."] = "点击右键将 %s加入好友列表"
L["Round Normal Price"] = "正常价格附近"
L["Running Scan..."] = "扫描中..."
L["Save New Price"] = "保存新价格"
L["Scan Complete!"] = "扫描完成!"
L["Scanning %d / %d"] = "扫描中 %d/%d"
L["Scanning %d / %d (Page %d / %d)"] = "扫描中 %d / %d (第%d/%d页)"
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 scan."] = "选择要进行扫描的分组"
L["Seller"] = "卖家"
L["Seller name of lowest auction for item %s was not returned from server. Skipping this item."] = "服务器未返回物品 %s 的最低价格拍卖者名字,跳过此物品。"
L["'%s' has an Auctioning operation of '%s' which no longer exists."] = "'%s'具有一个已经不存在的拍卖操作'%s'"
L["'%s' has an Auctioning operation of '%s' which no longer exists. Auctioning will ignore this group until this is fixed."] = "'%s'具有一个已经不存在的拍卖操作'%s'. 在修复前 Auctioning 会忽略这一分组"
L["Shift-Right-Click to show the options for this item's Auctioning group."] = "SHIFT+右键 点击显示此物品的拍卖分组选项。"
L["Shift-Right-Click to show the options for this operation.|r"] = "Shift+右键 显示这项操作的选项。|r"
L["Show All Auctions"] = "显示所有拍卖"
L["Show Auctioning values in Tooltip"] = "在鼠标提示中显示拍卖价格"
L["Show Item Auctions"] = "显示物品拍卖"
L["Show Log"] = "显示日志"
L["%s item(s) to buy/cancel"] = "%s 个物品来购买/取消"
L["Skip"] = "跳过"
L["Stack Size"] = "堆叠大小"
L["Start Cancel Scan"] = "开始'取消拍卖'扫描"
L["Starting Scan..."] = "开始扫描..."
L["Start Post Scan"] = "开始'发布拍卖'扫描"
L["Start Reset Scan"] = "开始转卖扫描"
L["Stop"] = "停止"
L["Target Price"] = "目标价"
L["Target Price:"] = "目标价:"
L["The filter cannot be empty. If you'd like to cancel all auctions, use the 'Cancel All Auctions' button."] = "筛选条件不能为空,如果你要取消所有拍卖,请点击“取消所有拍卖”按钮"
L["The lowest price you want an item to be posted for. Auctioning will not undercut auctions below this price."] = "所要发布的物品的最低价,如果他人物品低于此价格,TSM将不会发布物品"
L["The maximum amount that you want to spend in order to reset a particular item. This is the total amount, not a per-item amount."] = "您想出的最高价(购买低于这个价格的物品,转手卖高价),这是堆叠总价格,不是单件价格。"
L["The maximum price you want an item to be posted for. Auctioning will not undercut auctions above this price."] = "所要发布的物品的最高价,如果他人物品高于此价格,TSM将不会发布物品"
L["The minimum profit you would want to make from doing a reset. This is a per-item price where profit is the price you reset to minus the average price you spent per item."] = "通过转卖获取的最低利润。这是单件利润,利润 = 转卖价格 - 购买均价。"
L["There are two ways of making clicking the Post / Cancel Auction button easier. You can put %s and %s in a macro (on separate lines), or use the utility below to have a macro automatically made and bound to scrollwheel for you."] = "有两种方法让单击 发布拍卖 /取消拍卖 按钮更容易。你可以将 %s 和 %s 写入一个宏命令(分别写在单独的一行),或者下面的按钮自动新建一个宏并绑定快捷键到你的鼠标滚轮上。"
L["This determines what size range of prices should be considered a single price point for the reset scan. For example, if this is set to 1s, an auction at 20g50s20c and an auction at 20g49s45c will both be considered to be the same price level."] = "这个决定着在转卖扫描中同一价格水平的价格范围大小 。例如,如果设置为1s,20g50s20c 和 20g49s45c 会被认为在同一价格水平上。"
L["This dropdown determines the default tab when you visit an operation."] = "此下拉决定着您访问一个操作时的默认标签。"
L["This dropdown determines what Auctioning will do when the market for an item goes below your minimum price. You can either not post the items or post at one of your configured prices."] = "这个下拉菜单决定了当物品价格低于您的最低价格时进行的操作。您可以不发布物品或者以一个您配置的价格发布。"
L["This is the maximum amount you want to pay for a single item when reseting."] = "这是您原意为转卖支付的最高价(购买低价拍卖时支付的)。"
L["This item does not have any seller data."] = "这件物品没有任何卖家信息"
L["This number of undercut auctions will be kept on the auction house (not canceled) when doing a cancel scan."] = "当进行取消拍卖扫描时,保留该数量的被压价物品在拍卖行(不取消拍卖)"
L["Total Cost"] = "总花费"
L["Under 30min"] = "低于30分钟"
L["Undercut Amount"] = "压价金额"
L["Undercut by whitelisted player."] = "被白名单玩家压价"
L["Undercutting competition."] = "压价发布"
L["Up"] = ""
L["Use Stack Size as Cap"] = "使用堆叠上限作为最大发布量"
L["When Below Threshold (aka Reset Method)"] = "低于门槛价时(即转卖模式)"
L["Whitelist"] = "白名单"
L["Whitelists allow you to set other players besides you and your alts that you do not want to undercut; however, if somebody on your whitelist matches your buyout but lists a lower bid it will still consider them undercutting."] = "白名单可以设置除了你自己以外的玩家为不压价对象,但是如果白名单的玩家商品一口价和你一样,拍卖价比你低,照样对他压价。"
L["Will bind ScrollWheelDown (plus modifiers below) to the macro created."] = "将向下滚轮(加下面的辅助键)绑定到创建的宏"
L["Will bind ScrollWheelUp (plus modifiers below) to the macro created."] = "将向上滚轮(加下面的辅助键)绑定到创建的宏"
L["Will cancel all your auctions at or below the specified duration, including ones you didn't post with Auctioning."] = "将取消所有低于设定持续时间的拍卖,包括不是通过TSM发布的拍卖。"
L["Will cancel all your auctions, including ones which you didn't post with Auctioning."] = "将取消所有拍卖,包括不是通过TSM发布的拍卖。"
L["Will cancel all your auctions which match the specified filter, including ones which you didn't post with Auctioning."] = "将取消所有符合筛选条件的拍卖,包括不是通过TSM发布的拍卖。"
L["Will cancel auctions even if they have a bid on them, you will take an additional gold cost if you cancel an auction with bid."] = "即使拍卖品被竞拍也取消,取消一个被竞拍的拍卖品你将要为此付出额外的费用。"
L["You do not have any players on your whitelist yet."] = "您的白名单是空的。"
L["Your auction has not been undercut."] = "未被压价"
L["Your Buyout"] = "您的一口价"
L["You've been undercut."] = "已被压价"
+273
View File
@@ -0,0 +1,273 @@
-- ------------------------------------------------------------------------------ --
-- TradeSkillMaster_Auctioning --
-- http://www.curse.com/addons/wow/tradeskillmaster_auctioning --
-- --
-- A TradeSkillMaster Addon (http://tradeskillmaster.com) --
-- All Rights Reserved* - Detailed license information included with addon. --
-- ------------------------------------------------------------------------------ --
-- TradeSkillMaster_Auctioning Locale - zhTW
-- Please use the localization app on CurseForge to update this
-- http://wow.curseforge.com/addons/TradeSkillMaster_Auctioning/localization/
local L = LibStub("AceLocale-3.0"):NewLocale("TradeSkillMaster_Auctioning", "zhTW")
if not L then return end
-- L["2 to 12 hrs"] = ""
-- L["30min to 2hrs"] = ""
L["Add a new player to your whitelist."] = "新增玩家到你的白名單。"
L["Add player"] = "新增玩家"
L["Any auctions at or below the selected duration will be ignored. Selecting \"<none>\" will cause no auctions to be ignored based on duration."] = "處于或低于所選擇持續時間內的拍賣品將會被忽略. 選擇\\\"<空>\\\"將不會使拍賣品基於其持續時間而被忽略."
-- L["At normal price and not undercut."] = ""
L["Auction Buyout"] = "拍賣直購價"
L["Auction Buyout (Stack Price):"] = "拍賣直購價(堆疊價格):"
L["Auction has been bid on."] = "拍賣已經競標價。"
-- L["Auctioning operations contain settings for posting, canceling, and resetting items in a group. Type the name of the new operation into the box below and hit 'enter' to create a new Crafting operation."] = ""
-- L["Auctioning Prices:"] = ""
L["Auction not found. Skipped."] = "拍賣沒發現。略過。"
-- L["Auction Price Settings"] = ""
-- L["Auction Settings"] = ""
-- L["auctions of|r %s"] = ""
-- L["Below min price, posting at reset price."] = ""
L["Bid percent"] = "競標百分比"
L["Cancel"] = "取消"
-- L["Cancel All Auctions"] = ""
-- L["Cancel Auctions with Bids"] = ""
-- L["Cancel Filter:"] = ""
L["Canceling all auctions."] = "取消所有拍賣。"
L["Canceling auction which you've undercut."] = "當你削弱價格時取消拍賣。"
-- L["Canceling %d / %d"] = ""
L["Canceling to repost at higher price."] = "取消來重新發佈以更高的價格。"
L["Canceling to repost at reset price."] = "取消以重放價錢來重新發佈。"
-- L["Canceling to repost higher."] = ""
-- L["Canceling undercut auctions."] = ""
-- L["Canceling undercut auctions and to repost higher."] = ""
-- L["Cancel Low Duration"] = ""
L["Cancel Scan Finished"] = "取消掃描完成"
-- L["Cancel Settings"] = ""
-- L["Cancel to Repost Higher"] = ""
-- L["Cancel Undercut Auctions"] = ""
-- L["Cheapest auction below min price."] = ""
L["Click to show auctions for this item."] = "點擊顯示物品的拍賣。"
-- L["Confirming %d / %d"] = ""
L["Create Macro and Bind ScrollWheel (with selected options)"] = "建立巨集並綁定滑鼠滾輪(有已選擇的設定)"
L["Currently Owned:"] = "目前所擁有:"
-- L["Default Operation Tab"] = ""
L["Delete"] = "刪除"
-- L["Did not cancel %s because your cancel to repost threshold (%s) is invalid. Check your settings."] = ""
-- L["Did not cancel %s because your maximum price (%s) is invalid. Check your settings."] = ""
-- L["Did not cancel %s because your maximum price (%s) is lower than your minimum price (%s). Check your settings."] = ""
-- L["Did not cancel %s because your minimum price (%s) is invalid. Check your settings."] = ""
-- L["Did not cancel %s because your normal price (%s) is invalid. Check your settings."] = ""
-- L["Did not cancel %s because your normal price (%s) is lower than your minimum price (%s). Check your settings."] = ""
-- L["Did not post %s because your maximum price (%s) is invalid. Check your settings."] = ""
-- L["Did not post %s because your maximum price (%s) is lower than your minimum price (%s). Check your settings."] = ""
-- L["Did not post %s because your minimum price (%s) is invalid. Check your settings."] = ""
-- L["Did not post %s because your normal price (%s) is invalid. Check your settings."] = ""
-- L["Did not post %s because your normal price (%s) is lower than your minimum price (%s). Check your settings."] = ""
-- L["Did not reset %s because your maximum price (%s) is invalid. Check your settings."] = ""
-- L["Did not reset %s because your maximum price (%s) is lower than your minimum price (%s). Check your settings."] = ""
-- L["Did not reset %s because your minimum price (%s) is invalid. Check your settings."] = ""
-- L["Did not reset %s because your normal price (%s) is invalid. Check your settings."] = ""
-- L["Did not reset %s because your normal price (%s) is lower than your minimum price (%s). Check your settings."] = ""
-- L["Did not reset %s because your reset max cost (%s) is invalid. Check your settings."] = ""
-- L["Did not reset %s because your reset max item cost (%s) is invalid. Check your settings."] = ""
-- L["Did not reset %s because your reset min profit (%s) is invalid. Check your settings."] = ""
-- L["Did not reset %s because your reset resolution (%s) is invalid. Check your settings."] = ""
-- L["Disable Invalid Price Warnings"] = ""
L["Done Canceling"] = "取消完成"
L["Done Posting"] = "上架完成"
L[ [=[Done Posting
Total value of your auctions: %s
Incoming Gold: %s]=] ] = [=[完成發佈:
你拍賣的總價格:%s
收入金額:]=]
-- L["Done Scanning"] = ""
L[ [=[Done Scanning!
Could potentially reset %d items for %s profit.]=] ] = [=[完成掃描!
可能重放%d物品於%s利潤。]=]
L["Don't Post Items"] = "不要發佈物品"
L["Down"] = ""
L["Duration"] = "期間"
L["Edit Post Price"] = "編輯發佈價格"
-- L["Enable Reset Scan"] = ""
-- L["Enable Sounds"] = ""
-- L["Error creating operation. Operation with name '%s' already exists."] = ""
L["General"] = "一般"
-- L["General Operation Options"] = ""
-- L["General Options"] = ""
-- L["General Reset Settings"] = ""
L["General Settings"] = "一般設定"
-- L["Give the new operation a name. A descriptive name will help you find this operation later."] = ""
L["Help"] = "幫助"
L["How long auctions should be up for."] = "拍賣要發佈多久。"
-- L["How many auctions at the lowest price tier can be up at any one time. Setting this to 0 disables posting for any groups this operation is applied to."] = ""
L["How many items should be in a single auction, 20 will mean they are posted in stacks of 20."] = "多少物品在單一拍賣,20是指20的堆疊發佈。"
-- L["How much to undercut other auctions by. Format is in \"#g#s#c\". For example, \"50g30s\" means 50 gold, 30 silver, and no copper."] = ""
-- L["If an item can't be posted for at least this amount higher than its current value, it won't be canceled to repost higher."] = ""
-- L["If checked, a cancel scan will cancel any auctions which can be reposted for a higher price."] = ""
-- L["If checked, a cancel scan will cancel any auctions which have been undercut and are still above your threshold."] = ""
-- L["If checked, Auctioning will ignore all auctions that are posted at a different stack size than your auctions. For example, if there are stacks of 1, 5, and 20 up and you're posting in stacks of 1, it'll ignore all stacks of 5 and 20."] = ""
-- L["If checked, groups which the opperation applies to will be included in a reset scan."] = ""
-- L["If checked, the minimum, normal and maximum prices of the first operation for the item will be shown in tooltips."] = ""
-- L["If checked, TSM will not print out a chat message when you have an invalid price for an item. However, it will still show as invalid in the log."] = ""
-- L["If checked, whenever you post an item at its normal price, the buyout will be rounded up to the nearest gold."] = ""
-- L["If enabled, instead of not posting when a whitelisted player has an auction posted, Auctioning will match their price."] = ""
L["If you don't have enough items for a full post, it will post with what you have."] = "如果你沒有足夠的物品來完整發佈,將會發佈你擁有的。"
-- L["Ignore Low Duration Auctions"] = ""
L["Info"] = "資訊"
L["Invalid scan data for item %s. Skipping this item."] = "物品%s無效的掃描資料。略過這物品。"
L["Invalid seller data returned by server."] = "由伺服器回傳無效的賣家資料。"
L["Item"] = "物品"
L["Item/Group is invalid."] = "物品/群組是無效的。"
-- L["Keeping undercut auctions posted."] = ""
-- L["Keep Posted"] = ""
L["Log Info:"] = "紀錄資訊:"
-- L["Low Duration"] = ""
L["Lowest auction by whitelisted player."] = "根據白名單玩家最低拍賣。"
L["Lowest Buyout"] = "最低直購價"
L["Lowest Buyout:"] = "最低直購價:"
L["Macro created and keybinding set!"] = "巨集建立和快捷鍵設定!"
L["Macro Help"] = "巨集幫助"
-- L["Match Stack Size"] = ""
-- L["Match Whitelist Players"] = ""
L["Max Cost:"] = "最大花費:"
-- L["Max Cost Per Item"] = ""
L["Maximum amount already posted."] = "最大數量已經發佈。"
-- L["Maximum Price"] = ""
-- L["Maximum Price:"] = ""
L["Max Price Per:"] = "每一最大價格:"
L["Max Quantity:"] = "最大數量:"
-- L["Max Quantity to Buy"] = ""
-- L["Max Reset Cost"] = ""
-- L["Minimum Price:"] = ""
-- L["Minimum Price (aka Threshold)"] = ""
L["Min Profit:"] = "最小利潤:"
-- L["Min Reset Profit"] = ""
-- L["Min (%s), Normal (%s), Max (%s)"] = ""
L["Modifiers:"] = "功能鍵:"
-- L["Move AH Shortfall To Bags"] = ""
-- L["Move Group To Bags"] = ""
-- L["Move Group To Bank"] = ""
-- L["Move Non Group Items to Bank"] = ""
-- L["Move Post Cap To Bags"] = ""
L["Must wait for scan to finish before starting to reset."] = "在開始重放前必須等待掃描來完成。"
-- L["New Operation"] = ""
L["No Items to Reset"] = "沒有物品要重放"
L["<none>"] = "<無>"
-- L["No posting."] = ""
-- L["Normal Price:"] = ""
-- L["Normal Price (aka Fallback)"] = ""
-- L["Not canceling."] = ""
L["Not canceling auction at reset price."] = "不以重放價格取消拍賣。"
-- L["Not canceling auction below min price."] = ""
L["Not enough items in bags."] = "在背包沒有足夠的物品。"
-- L["NOTE: You can right click on any of the price settings below to show a window which will help with more advanced price settings such as using a % of another price source."] = ""
-- L["Nothing to Move"] = ""
-- L["Not resetting."] = ""
-- L["Operation"] = ""
-- L["Operation Name"] = ""
-- L["Operations"] = ""
L["Options"] = "設定"
-- L["Other Auctioning Searches"] = ""
L["Percentage of the buyout as bid, if you set this to 90% then a 100g buyout will have a 90g bid."] = "競標價百分比,如果你設定90%,那麼100G直購價將會有90G競標價。"
L["Player name"] = "玩家名稱"
L["Plays the ready check sound when a post / cancel scan is complete and items are ready to be posting / canceled (the gray bar is all the way across)."] = "當發佈或取消掃描完成後,物品已準備好被發佈或取消(灰色進度條滿)時播放聲音。"
L["Please don't move items around in your bags while a post scan is running! The item was skipped to avoid an incorrect item being posted."] = "在你的背包請不要四處移動物品當發布掃描正在執行!物品會被略過避免不正確物品被發佈。"
L["Post"] = "發佈"
-- L["Post at Maximum Price"] = ""
-- L["Post at Minimum Price"] = ""
-- L["Post at Normal Price"] = ""
-- L["Post Cap"] = ""
-- L["Posted at whitelisted player's price."] = ""
-- L["Posting at normal price."] = ""
L["Posting at whitelisted player's price."] = "發佈以白名單玩家的價格。"
L["Posting at your current price."] = "發佈以你目前的價格。"
-- L["Posting %d / %d"] = ""
-- L["Posting %d stack(s) of %d for %d hours."] = ""
-- L["Posting Price Settings"] = ""
L["Post Scan Finished"] = "發佈掃描完成"
-- L["Post Settings"] = ""
-- L["Preparing Filter %d / %d"] = ""
-- L["Preparing Filters..."] = ""
-- L["Preparing to Move"] = ""
-- L["Price Resolution"] = ""
-- L["Price to post at if there are no auctions up under your maximum price. This includes the case where there's none of an item on the AH."] = ""
L["Processing Items..."] = "物品處理中..."
L["Profit:"] = "利潤:"
L["Profit Per Item"] = "每一物品利潤"
L["Quantity (Yours)"] = "數量(你的)"
-- L["Relationships"] = ""
-- L["Repost Higher Threshold"] = ""
-- L["Reset"] = ""
L["Reset Scan Finished"] = "重放掃描完成"
-- L["Reset Settings"] = ""
-- L["Resetting enabled."] = ""
-- L["Restart"] = ""
L["Return to Summary"] = "回到摘要"
L["Right-Click to add %s to your friends list."] = "右鍵-點擊新增%s到你的朋友清單。"
-- L["Round Normal Price"] = ""
L["Running Scan..."] = "正在掃描..."
L["Save New Price"] = "儲存新價格"
-- L["Scan Complete!"] = ""
-- L["Scanning %d / %d"] = ""
-- L["Scanning %d / %d (Page %d / %d)"] = ""
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 scan."] = ""
L["Seller"] = "賣家"
L["Seller name of lowest auction for item %s was not returned from server. Skipping this item."] = "最低拍賣的賣家名稱對於物品%s沒有從伺服器回傳。略過這物品。"
-- L["'%s' has an Auctioning operation of '%s' which no longer exists."] = ""
-- L["'%s' has an Auctioning operation of '%s' which no longer exists. Auctioning will ignore this group until this is fixed."] = ""
L["Shift-Right-Click to show the options for this item's Auctioning group."] = "Shift-右鍵-點擊顯示物品的Auctioning群組設定。"
-- L["Shift-Right-Click to show the options for this operation.|r"] = ""
L["Show All Auctions"] = "顯示所有拍賣"
-- L["Show Auctioning values in Tooltip"] = ""
L["Show Item Auctions"] = "顯示物品拍賣"
L["Show Log"] = "顯示紀錄"
L["%s item(s) to buy/cancel"] = "%s物品來買/取消"
L["Skip"] = "略過"
L["Stack Size"] = "堆疊大小"
-- L["Start Cancel Scan"] = ""
-- L["Starting Scan..."] = ""
-- L["Start Post Scan"] = ""
-- L["Start Reset Scan"] = ""
-- L["Stop"] = ""
L["Target Price"] = "目標價格"
L["Target Price:"] = "目標價格:"
-- L["The filter cannot be empty. If you'd like to cancel all auctions, use the 'Cancel All Auctions' button."] = ""
-- L["The lowest price you want an item to be posted for. Auctioning will not undercut auctions below this price."] = ""
L["The maximum amount that you want to spend in order to reset a particular item. This is the total amount, not a per-item amount."] = "為了重放特別的物品你想要的花費最大數量。這是總數量,不是每一物品數量。"
-- L["The maximum price you want an item to be posted for. Auctioning will not undercut auctions above this price."] = ""
L["The minimum profit you would want to make from doing a reset. This is a per-item price where profit is the price you reset to minus the average price you spent per item."] = "從重放中你想要的最小利潤。這是每一物品你重放到減去你花費的每一物品平均價格的利潤價格。"
L["There are two ways of making clicking the Post / Cancel Auction button easier. You can put %s and %s in a macro (on separate lines), or use the utility below to have a macro automatically made and bound to scrollwheel for you."] = "這裡有兩種方法可以使得點擊拍賣或取消按鈕變得更簡單。你可以在一個巨集的不同行中輸入%s和%s或者使用以下提供的功能自動獲得一個巨集並綁定到滑鼠滾輪上。"
L["This determines what size range of prices should be considered a single price point for the reset scan. For example, if this is set to 1s, an auction at 20g50s20c and an auction at 20g49s45c will both be considered to be the same price level."] = "決定價錢大小範圍應該為了重放掃描考慮單一價錢點。舉例,如果設定為1s,拍賣為20g50s20c並且拍賣在20g49s45c都會被考慮進相同價格等級。"
-- L["This dropdown determines the default tab when you visit an operation."] = ""
-- L["This dropdown determines what Auctioning will do when the market for an item goes below your minimum price. You can either not post the items or post at one of your configured prices."] = ""
L["This is the maximum amount you want to pay for a single item when reseting."] = "當重放時你想要支付單一物品的最大數量。"
L["This item does not have any seller data."] = "這物品沒有任何賣家資料。"
-- L["This number of undercut auctions will be kept on the auction house (not canceled) when doing a cancel scan."] = ""
L["Total Cost"] = "總花費"
-- L["Under 30min"] = ""
-- L["Undercut Amount"] = ""
L["Undercut by whitelisted player."] = "根據白名單玩家削弱價格。"
L["Undercutting competition."] = "削弱價格設定。"
L["Up"] = ""
-- L["Use Stack Size as Cap"] = ""
-- L["When Below Threshold (aka Reset Method)"] = ""
L["Whitelist"] = "白名單"
L["Whitelists allow you to set other players besides you and your alts that you do not want to undercut; however, if somebody on your whitelist matches your buyout but lists a lower bid it will still consider them undercutting."] = "白名單允許你設定其他除了你和分身之外的你不想削弱價格的玩家;但是,如果你的白名單中的玩家所發佈的物品與你的直購價相同但競價低於你,系統也會認為他們需要被削弱價格。"
L["Will bind ScrollWheelDown (plus modifiers below) to the macro created."] = "將會綁定滾輪向下滾動(加修飾之下)到巨集建立。"
L["Will bind ScrollWheelUp (plus modifiers below) to the macro created."] = "將會綁定滾輪向上滾動(加修飾之下)到巨集建立。"
-- L["Will cancel all your auctions at or below the specified duration, including ones you didn't post with Auctioning."] = ""
-- L["Will cancel all your auctions, including ones which you didn't post with Auctioning."] = ""
-- L["Will cancel all your auctions which match the specified filter, including ones which you didn't post with Auctioning."] = ""
L["Will cancel auctions even if they have a bid on them, you will take an additional gold cost if you cancel an auction with bid."] = "將會下架已有人競標的物品,下架已競標物品你將會向拍賣行額外支出一些費用。"
L["You do not have any players on your whitelist yet."] = "目前你的白名單中還沒有任何人。"
L["Your auction has not been undercut."] = "你的拍賣沒有削弱價格。"
-- L["Your Buyout"] = ""
L["You've been undercut."] = "你已經削弱價格。"
@@ -0,0 +1,511 @@
-- ------------------------------------------------------------------------------ --
-- TradeSkillMaster_Auctioning --
-- http://www.curse.com/addons/wow/tradeskillmaster_auctioning --
-- --
-- A TradeSkillMaster Addon (http://tradeskillmaster.com) --
-- All Rights Reserved* - Detailed license information included with addon. --
-- ------------------------------------------------------------------------------ --
local TSM = select(2, ...)
local Cancel = TSM:NewModule("Cancel", "AceEvent-3.0")
local L = LibStub("AceLocale-3.0"):GetLocale("TradeSkillMaster_Auctioning") -- loads the localization table
local cancelQueue, currentItem, tempIndexList = {}, {}, {}
local totalToCancel, totalCanceled, count = 0, 0, 0
local isScanning, GUI, isCancelAll, specialOptions
local itemsCancelled, itemsMissed = {}, {}
function Cancel:ValidateOperation(itemString, operation)
local _, itemLink = TSMAPI:GetSafeItemInfo(itemString)
local prices = TSM.Util:GetItemPrices(operation, itemString)
-- don't cancel this item if their settings are invalid
if not prices.minPrice then
if not TSM.db.global.disableInvalidMsg then
TSM:Printf(L["Did not cancel %s because your minimum price (%s) is invalid. Check your settings."], itemLink or itemString, operation.minPrice)
end
TSM.Log:AddLogRecord(itemString, "cancel", "Skip", "invalid")
elseif not prices.maxPrice then
if not TSM.db.global.disableInvalidMsg then
TSM:Printf(L["Did not cancel %s because your maximum price (%s) is invalid. Check your settings."], itemLink or itemString, operation.maxPrice)
end
TSM.Log:AddLogRecord(itemString, "cancel", "Skip", "invalid")
elseif not prices.normalPrice then
if not TSM.db.global.disableInvalidMsg then
TSM:Printf(L["Did not cancel %s because your normal price (%s) is invalid. Check your settings."], itemLink or itemString, operation.normalPrice)
end
TSM.Log:AddLogRecord(itemString, "cancel", "Skip", "invalid")
elseif operation.cancelRepost and not prices.cancelRepostThreshold then
if not TSM.db.global.disableInvalidMsg then
TSM:Printf(L["Did not cancel %s because your cancel to repost threshold (%s) is invalid. Check your settings."], itemLink or itemString, operation.cancelRepostThreshold)
end
TSM.Log:AddLogRecord(itemString, "cancel", "Skip", "invalid")
elseif not prices.undercut then
if not TSM.db.global.disableInvalidMsg then
TSM:Printf(L["Did not cancel %s because your undercut (%s) is invalid. Check your settings."], itemLink or itemString, operation.undercut)
end
TSM.Log:AddLogRecord(itemString, "cancel", "Skip", "invalid")
elseif prices.maxPrice < prices.minPrice then
if not TSM.db.global.disableInvalidMsg then
TSM:Printf(L["Did not cancel %s because your maximum price (%s) is lower than your minimum price (%s). Check your settings."], itemLink or itemString, operation.maxPrice, operation.minPrice)
end
TSM.Log:AddLogRecord(itemString, "cancel", "Skip", "invalid")
elseif prices.normalPrice < prices.minPrice then
if not TSM.db.global.disableInvalidMsg then
TSM:Printf(L["Did not cancel %s because your normal price (%s) is lower than your minimum price (%s). Check your settings."], itemLink or itemString, operation.normalPrice, operation.minPrice)
end
TSM.Log:AddLogRecord(itemString, "cancel", "Skip", "invalid")
else
return true
end
end
function Cancel:GetScanListAndSetup(GUIRef, options)
-- setup stuff
GUI = GUIRef
options = options or {}
isScanning = true
options.noScan = options.specialMode
isCancelAll = options.specialMode
wipe(cancelQueue)
wipe(currentItem)
wipe(itemsCancelled)
wipe(itemsMissed)
wipe(TSM.operationLookup)
totalToCancel, totalCanceled, count = 0, 0, 0
local tempList, scanList, groupTemp = {}, {}, {}
specialOptions = specialOptions or {}
wipe(specialOptions)
if type(options.specialMode) == "string" then
if strsub(options.specialMode, 1, 1) == "<" then
specialOptions.specialPriceMax = TSMAPI:UnformatTextMoney(strsub(options.specialMode, 2))
isCancelAll = "price"
elseif strsub(options.specialMode, 1, 1) == ">" then
specialOptions.specialPriceMin = TSMAPI:UnformatTextMoney(strsub(options.specialMode, 2))
isCancelAll = "price"
end
end
for i=GetNumAuctionItems("owner"), 1, -1 do
-- ignore sold auctions
if select(13, GetAuctionItemInfo("owner", i)) == 0 then
local itemString = TSMAPI:GetBaseItemString(GetAuctionItemLink("owner", i), true)
if not TSM.db.global.cancelWithBid and select(10, GetAuctionItemInfo("owner", i)) > 0 then
-- we aren't canceling auctions with bids
TSM.Log:AddLogRecord(itemString, "cancel", "Skip", "bid")
else
if specialOptions.specialPriceMin then
-- cancel auctions above some min price
local buyout = select(9, GetAuctionItemInfo("owner", i))
if buyout > 0 and buyout > specialOptions.specialPriceMin then
tempList[itemString] = true
end
elseif specialOptions.specialPriceMax then
-- cancel auctions below some max price
local buyout = select(9, GetAuctionItemInfo("owner", i))
if buyout > 0 and buyout < specialOptions.specialPriceMax then
tempList[itemString] = true
end
elseif options.specialMode == "CancelAll" then
-- cancel all auctions
tempList[itemString] = true
elseif type(options.specialMode) == "number" then
-- cancel low duration auctions
local timeLeft = GetAuctionItemTimeLeft("owner", i)
if timeLeft <= options.specialMode then
tempList[itemString] = true
end
elseif options.specialMode then
-- cancel all items matching filter
local itemName = GetAuctionItemInfo("owner", i)
if strfind(strlower(itemName), strlower(options.specialMode)) then
tempList[itemString] = true
end
elseif options.itemOperations[itemString] then
-- normal cancel scan
local operations = {}
for _, operation in pairs(options.itemOperations[itemString]) do
if operation.cancelUndercut or operation.cancelRepost then
tinsert(operations, operation)
end
end
tempList[itemString] = operations
end
end
end
end
if options.specialMode then
for itemString in pairs(tempList) do
tinsert(scanList, itemString)
end
else
for itemString, operations in pairs(tempList) do
TSM.operationLookup[itemString] = operations
local isValid
for _, operation in pairs(operations) do
if operation.cancelUndercut or operation.cancelRepost then
isValid = true
if not Cancel:ValidateOperation(itemString, operation) then
isValid = nil
break
end
end
end
if isValid then
tinsert(scanList, itemString)
end
end
TSMAPI:FireEvent("AUCTIONING:CANCEL:START", {num=#scanList})
end
return scanList
end
function Cancel:ProcessItem(itemString, noLog)
if isCancelAll then
return Cancel:SpecialScanProcessItem(itemString, noLog)
end
local operations = TSM.operationLookup[itemString]
if not operations then return end
for _, operation in pairs(operations) do
local toCancel, reasonToCancel, reasonNotToCancel, buyout
local cancelAuctions = {}
for i=GetNumAuctionItems("owner"), 1, -1 do
if select(13, GetAuctionItemInfo("owner", i)) == 0 and itemString == TSMAPI:GetBaseItemString(GetAuctionItemLink("owner", i), true) then
local shouldCancel, reason = Cancel:ShouldCancel(i, operation)
if shouldCancel then
shouldCancel.reason = reason
tinsert(cancelAuctions, shouldCancel)
buyout = select(9, GetAuctionItemInfo("owner", i))
else
reasonNotToCancel = reasonNotToCancel or reason
buyout = buyout or select(9, GetAuctionItemInfo("owner", i))
end
end
end
local numKept = 0
sort(cancelAuctions, function(a, b) return a.buyout < b.buyout end) --keepPosted
for i=#cancelAuctions, 1, -1 do
local auction = cancelAuctions[i]
if (auction.reason == "whitelistUndercut" or auction.reason == "undercut" or auction.reason == "notLowest") and numKept < operation.keepPosted then
numKept = numKept + 1
reasonNotToCancel = "keepPosted"
else
toCancel = true
reasonToCancel = auction.reason
totalToCancel = totalToCancel + 1
tinsert(cancelQueue, auction)
end
end
if totalToCancel > 0 then
TSM.Manage:UpdateStatus("manage", totalCanceled, totalToCancel)
end
if not noLog then
if toCancel then
TSM.Log:AddLogRecord(itemString, "cancel", "Cancel", reasonToCancel, operation, buyout)
elseif reasonNotToCancel then
TSM.Log:AddLogRecord(itemString, "cancel", "Skip", reasonNotToCancel, operation, buyout)
end
end
if #cancelQueue > 0 and not currentItem.buyout then
Cancel:SetupForAction()
end
end
end
function Cancel:SpecialScanProcessItem(itemString, noLog)
local toCancel, reasonToCancel, reasonNotToCancel
local cancelAuctions = {}
for i=GetNumAuctionItems("owner"), 1, -1 do
if select(13, GetAuctionItemInfo("owner", i)) == 0 and itemString == TSMAPI:GetBaseItemString(GetAuctionItemLink("owner", i), true) then
local _, _, quantity, _, _, _, bid, _, buyout, activeBid, _, _, wasSold = GetAuctionItemInfo("owner", i)
local cancelData = {itemString=itemString, stackSize=quantity, buyout=buyout, bid=bid, index=i, numStacks=1}
if specialOptions.specialPriceMin then
if buyout > specialOptions.specialPriceMin then
cancelData.reason = "cancelAll"
tinsert(cancelAuctions, cancelData)
else
reasonNotToCancel = reasonNotToCancel or "cancelAll"
end
elseif specialOptions.specialPriceMax then
if buyout < specialOptions.specialPriceMax then
cancelData.reason = "cancelAll"
tinsert(cancelAuctions, cancelData)
else
reasonNotToCancel = reasonNotToCancel or "cancelAll"
end
elseif type(isCancelAll) ~= "number" or GetAuctionItemTimeLeft("owner", i) <= isCancelAll then
cancelData.reason = "cancelAll"
tinsert(cancelAuctions, cancelData)
else
reasonNotToCancel = reasonNotToCancel or "cancelAll"
end
end
end
local numKept = 0
sort(cancelAuctions, function(a, b) return a.buyout < b.buyout end) --keepPosted
for i=#cancelAuctions, 1, -1 do
local auction = cancelAuctions[i]
toCancel = true
reasonToCancel = auction.reason
totalToCancel = totalToCancel + 1
tinsert(cancelQueue, auction)
end
if totalToCancel > 0 then
TSM.Manage:UpdateStatus("manage", totalCanceled, totalToCancel)
end
if not noLog then
if toCancel then
TSM.Log:AddLogRecord(itemString, "cancel", "Cancel", reasonToCancel)
elseif reasonNotToCancel then
TSM.Log:AddLogRecord(itemString, "cancel", "Skip", reasonNotToCancel)
end
end
if #cancelQueue > 0 and not currentItem.buyout then
Cancel:SetupForAction()
end
end
function Cancel:ShouldCancel(index, operation)
local _, _, quantity, _, _, _, bid, _, buyout, activeBid, _, _, wasSold = GetAuctionItemInfo("owner", index)
local buyoutPerItem = floor(buyout / quantity)
local bidPerItem = floor(bid / quantity)
if operation.matchStackSize and quantity ~= operation.stackSize then return end
local itemString = TSMAPI:GetBaseItemString(GetAuctionItemLink("owner", index), true)
local cancelData = {itemString=itemString, stackSize=quantity, buyout=buyout, bid=bid, index=index, numStacks=1, operation=operation}
local auctionItem = TSM.Scan.auctionData[itemString]
local lowestBuyout, lowestBid, lowestOwner, isWhitelist, isPlayer, isInvalidSeller = TSM.Scan:GetLowestAuction(itemString, operation)
local secondLowest = TSM.Scan:GetSecondLowest(itemString, lowestBuyout, operation) or 0
if wasSold == 1 or not lowestOwner then
-- if this auction was sold or we don't have any data on it then this request is invalid
return
elseif isInvalidSeller or not lowestBuyout then
if isInvalidSeller then
TSM:Printf(L["Seller name of lowest auction for item %s was not returned from server. Skipping this item."], GetAuctionItemLink("owner", index))
else
TSM:Printf(L["Invalid scan data for item %s. Skipping this item."], GetAuctionItemLink("owner", index))
end
return false, "invalidSeller"
end
if not TSM.db.global.cancelWithBid and activeBid > 0 then
-- Don't cancel an auction if it has a bid and we're set to not cancel those
return false, "bid"
end
local prices = TSM.Util:GetItemPrices(operation, itemString)
if buyoutPerItem < prices.minPrice then
-- this auction is below min price
if operation.cancelRepost and prices.resetPrice and buyoutPerItem < (prices.resetPrice - prices.cancelRepostThreshold) then
-- canceling to post at reset price
return cancelData, "reset"
end
return false, "belowMinPrice"
elseif lowestBuyout < prices.minPrice then
-- lowest buyout is below min price, so do nothing
return false, "belowMinPrice"
else
-- lowest buyout is above the min price
if operation.cancelUndercut and (buyoutPerItem - prices.undercut) > (TSM.Scan:GetPlayerLowestBuyout(auctionItem, operation) or math.huge) then
-- this is not our lowest auction
return cancelData, "notLowest"
elseif auctionItem:IsPlayerOnly() then
-- we are posted at the aboveMax price with no competition under our max price
-- check if we can repost higher
if operation.cancelRepost and prices.normalPrice - buyoutPerItem > prices.cancelRepostThreshold then
-- we can repost higher
return cancelData, "repost"
end
return false, "atNormal"
elseif isPlayer and (secondLowest > prices.maxPrice) then
-- we are posted at the aboveMax price with no competition under our max price
-- check if we can repost higher
if operation.cancelRepost and prices.aboveMax - buyoutPerItem > prices.cancelRepostThreshold then
-- we can repost higher
return cancelData, "repost"
end
return false, "atAboveMax"
elseif isPlayer then
-- we are the loewst auction
-- check if we can repost higher
if operation.cancelRepost and ((secondLowest - prices.undercut) - lowestBuyout) > prices.cancelRepostThreshold then
-- we can repost higher
return cancelData, "repost"
end
return false, "notUndercut"
elseif not operation.cancelUndercut then
return -- we're undercut but not canceling undercut auctions
elseif isWhitelist and buyoutPerItem == lowestBuyout then
-- at whitelisted player price
return false, "atWhitelist"
elseif not isWhitelist then
-- we've been undercut by somebody not on our whitelist
return cancelData, "undercut"
elseif buyoutPerItem ~= lowestBuyout or bidPerItem ~= lowestBid then
-- somebody on our whitelist undercut us (or their bid is lower)
return cancelData, "whitelistUndercut"
end
end
error("unexpectedly reached end", buyoutPerItem, lowestBuyout, isWhitelist, isPlayer, prices.minPrice)
end
-- register events and queue up the first item to cancel
function Cancel:SetupForAction()
Cancel:RegisterEvent("CHAT_MSG_SYSTEM")
Cancel:RegisterEvent("UI_ERROR_MESSAGE")
TSM.Manage:UpdateStatus("manage", totalCanceled, totalToCancel)
wipe(currentItem)
currentItem = cancelQueue[1]
TSM.Manage:SetCurrentItem(currentItem)
GUI.buttons:Enable()
end
-- Check if an auction was canceled and move on if so
function Cancel:CHAT_MSG_SYSTEM(_, msg)
if msg == ERR_AUCTION_REMOVED then
count = count + 1
TSM.Manage:UpdateStatus("confirm", count, totalToCancel)
end
end
-- "Item Not Found" error
function Cancel:UI_ERROR_MESSAGE(event, msg)
if msg == ERR_ITEM_NOT_FOUND then
count = count + 1
TSM.Manage:UpdateStatus("confirm", count, totalToCancel)
tinsert(itemsMissed, itemsCancelled[count])
end
end
local function CountFrame()
if count == totalToCancel then
TSMAPI:CancelFrame("cancelCountFrame")
Cancel:Stop()
end
end
local function DelayFrame()
if not isScanning and #(cancelQueue) == 0 then
TSMAPI:CreateFunctionRepeat("cancelCountFrame", CountFrame)
TSMAPI:CancelFrame("cancelDelayFrame")
elseif #(cancelQueue) > 0 then
Cancel:UpdateItem()
TSMAPI:CancelFrame("cancelDelayFrame")
end
end
-- updates the current item to the first one in the list
function Cancel:UpdateItem()
if #(cancelQueue) == 0 then
GUI.buttons:Disable()
if isScanning then
TSMAPI:CreateFunctionRepeat("cancelDelayFrame", DelayFrame)
else
TSMAPI:CreateFunctionRepeat("cancelCountFrame", CountFrame)
end
return
end
sort(cancelQueue, function(a, b) return (a.index or 0)>(b.index or 0) end)
totalCanceled = totalCanceled + 1
TSM.Manage:UpdateStatus("manage", totalCanceled, totalToCancel)
wipe(currentItem)
currentItem = cancelQueue[1]
TSM.Manage:SetCurrentItem(currentItem)
GUI.buttons:Enable()
end
-- cancel the current item (gets called when the button is pressed
function Cancel:DoAction()
local index, backupIndex
-- make sure the currentItem is accurate
if cancelQueue[1].itemString ~= currentItem.itemString then
Cancel:UpdateItem()
end
-- figure out which index the item goes to
for i=GetNumAuctionItems("owner"), 1, -1 do
local _, _, quantity, _, _, _, bid, _, buyout, activeBid = GetAuctionItemInfo("owner", i)
local itemString = TSMAPI:GetBaseItemString(GetAuctionItemLink("owner", i), true)
if itemString == currentItem.itemString and abs((buyout or 0) - (currentItem.buyout or 0)) < quantity and abs((bid or 0) - (currentItem.bid or 0)) < quantity and (not TSM.db.global.cancelWithBid and activeBid == 0 or TSM.db.global.cancelWithBid) then
if not tempIndexList[itemString..buyout..bid..i] then
tempIndexList[itemString..buyout..bid..i] = true
index = i
break
else
backupIndex = i
end
end
end
-- if we found an index then cancel the item
if index then
CancelAuction(index)
elseif backupIndex then
CancelAuction(backupIndex)
end
-- disable the button and move onto the next item
GUI.buttons:Disable()
tinsert(itemsCancelled, CopyTable(cancelQueue[1]))
tremove(cancelQueue, 1)
Cancel:UpdateItem()
end
-- gets called when the "Skip Item" button is pressed
function Cancel:SkipItem()
tremove(cancelQueue, 1)
count = count + 1
TSM.Manage:UpdateStatus("confirm", count, totalToCancel)
Cancel:UpdateItem()
end
-- we are done canceling (maybe)
function Cancel:Stop(interrupted)
wipe(tempIndexList)
if #itemsMissed == 0 or interrupted then
-- didn't get "item not found" for any cancels or we were interrupted so we are done
TSMAPI:CancelFrame("cancelCountFrame")
TSMAPI:CancelFrame("cancelDelayFrame")
TSMAPI:CancelFrame("updateCancelStatus")
GUI:Stopped()
Cancel:UnregisterAllEvents()
wipe(currentItem)
totalToCancel, totalCanceled = 0, 0
isScanning = false
else -- got an "item not found" so requeue ones that we missed
count = totalToCancel
for _, info in ipairs(itemsMissed) do
Cancel:ProcessItem(info.itemString, true)
end
wipe(itemsMissed)
isScanning = false
Cancel:UpdateItem()
end
end
function Cancel:DoneScanning()
isScanning = false
return totalToCancel
end
function Cancel:GetCurrentItem()
return currentItem
end
+957
View File
@@ -0,0 +1,957 @@
-- ------------------------------------------------------------------------------ --
-- TradeSkillMaster_Auctioning --
-- http://www.curse.com/addons/wow/tradeskillmaster_auctioning --
-- --
-- A TradeSkillMaster Addon (http://tradeskillmaster.com) --
-- All Rights Reserved* - Detailed license information included with addon. --
-- ------------------------------------------------------------------------------ --
local TSM = select(2, ...)
local L = LibStub("AceLocale-3.0"):GetLocale("TradeSkillMaster_Auctioning") -- loads the localization table
local GUI = TSM:NewModule("GUI", "AceEvent-3.0", "AceHook-3.0")
local AceGUI = LibStub("AceGUI-3.0")
local private = {}
function private:CreateButtons(parent)
local height = 24
local frame = CreateFrame("Frame", nil, parent)
frame:SetHeight(height)
frame:SetWidth(210)
frame:SetPoint("BOTTOMRIGHT", -92, 5)
frame.Enable = function(self)
if private.mode == "Post" then
self.post:Enable()
elseif private.mode == "Cancel" then
self.cancel:Enable()
end
self.skip:Enable()
self.stop:Enable()
end
frame.Disable = function(self)
if private.mode == "Post" then
self.post:Disable()
elseif private.mode == "Cancel" then
self.cancel:Disable()
end
self.skip:Disable()
end
frame.UpdateMode = function(self)
if private.mode == "Post" then
self.post:Show()
self.cancel:Hide()
self.cancel:Disable()
elseif private.mode == "Cancel" then
self.post:Hide()
self.post:Disable()
self.cancel:Show()
end
self.stop:Enable()
end
local function OnClick(self)
if self.which == "stop" and self.isDone then
GUI:HideSelectionFrame()
private.selectionFrame:Show()
elseif frame:IsVisible() and private.OnAction then
private:OnAction(self.which)
end
end
local button = TSMAPI.GUI:CreateButton(frame, 22, "TSMAuctioningPostButton")
button:SetPoint("TOPLEFT")
button:SetWidth(80)
button:SetHeight(height)
button:SetText(L["Post"])
button.which = "action"
button:SetScript("OnClick", OnClick)
frame.post = button
local button = TSMAPI.GUI:CreateButton(frame, 22, "TSMAuctioningCancelButton")
button:SetPoint("TOPLEFT")
button:SetWidth(80)
button:SetHeight(height)
button:SetText(L["Cancel"])
button.which = "action"
button:SetScript("OnClick", OnClick)
frame.cancel = button
local button = TSMAPI.GUI:CreateButton(frame, 18)
button:SetPoint("TOPLEFT", frame.post, "TOPRIGHT", 5, 0)
button:SetWidth(60)
button:SetHeight(height)
button:SetText(L["Skip"])
button.which = "skip"
button:SetScript("OnClick", OnClick)
frame.skip = button
local button = TSMAPI.GUI:CreateButton(frame, 18)
button:SetPoint("TOPLEFT", frame.skip, "TOPRIGHT", 5, 0)
button:SetWidth(70)
button:SetHeight(height)
button:SetText(L["Stop"])
button.which = "stop"
button:SetScript("OnClick", OnClick)
frame.stop = button
return frame
end
function private:CreateContentButtons(parent)
local frame = CreateFrame("Frame", nil, parent)
frame:SetAllPoints(parent)
frame.UpdateMode = function(self)
if private.mode == "Post" then
self.currAuctionsButton:Show()
self.editPriceButton:Show()
self.editPriceButton:Disable()
elseif private.mode == "Cancel" then
self.currAuctionsButton:Show()
self.editPriceButton:Hide()
end
end
frame.UnlockHighlight = function(self)
self.auctionsButton:UnlockHighlight()
self.logButton:UnlockHighlight()
self.currAuctionsButton:UnlockHighlight()
self.editPriceButton:UnlockHighlight()
end
local function OnClick(self)
frame:UnlockHighlight()
self:LockHighlight()
frame.editPriceFrame:Hide()
if self.which == "log" then
private.auctionsST:Hide()
private.logST:Show()
private:UpdateLogSTData()
elseif self.which == "auctions" then
private.logST:Hide()
private.auctionsST:Show()
private.auctionsST.isCurrentItem = nil
private:UpdateAuctionsSTData()
elseif self.which == "currAuctions" then
private.logST:Hide()
private.auctionsST:Show()
private.auctionsST.isCurrentItem = true
private:UpdateAuctionsSTData()
elseif self.which == "editPrice" then
frame.editPriceFrame:Show()
end
end
local auctionsButton = TSMAPI.GUI:CreateButton(frame, 16)
auctionsButton:SetPoint("TOPRIGHT", -10, -20)
auctionsButton:SetHeight(17)
auctionsButton:SetWidth(150)
auctionsButton.which = "auctions"
auctionsButton:SetScript("OnClick", OnClick)
auctionsButton:SetText(L["Show All Auctions"])
frame.auctionsButton = auctionsButton
local currAuctionsButton = TSMAPI.GUI:CreateButton(frame, 16)
currAuctionsButton:SetPoint("TOPRIGHT", -170, -20)
currAuctionsButton:SetHeight(17)
currAuctionsButton:SetWidth(150)
currAuctionsButton.which = "currAuctions"
currAuctionsButton:SetScript("OnClick", OnClick)
currAuctionsButton:SetText(L["Show Item Auctions"])
frame.currAuctionsButton = currAuctionsButton
local logButton = TSMAPI.GUI:CreateButton(frame, 16)
logButton:SetPoint("TOPRIGHT", -10, -45)
logButton:SetHeight(17)
logButton:SetWidth(150)
logButton.which = "log"
logButton:SetScript("OnClick", OnClick)
logButton:SetText(L["Show Log"])
frame.logButton = logButton
local editPriceButton = TSMAPI.GUI:CreateButton(frame, 16)
editPriceButton:SetPoint("TOPRIGHT", -170, -45)
editPriceButton:SetHeight(17)
editPriceButton:SetWidth(150)
editPriceButton.which = "editPrice"
editPriceButton:SetScript("OnClick", OnClick)
editPriceButton:SetText(L["Edit Post Price"])
frame.editPriceButton = editPriceButton
local editPriceFrame = CreateFrame("Frame", nil, frame)
TSMAPI.Design:SetFrameBackdropColor(editPriceFrame)
editPriceFrame:SetPoint("CENTER")
editPriceFrame:SetFrameStrata("DIALOG")
editPriceFrame:SetWidth(300)
editPriceFrame:SetHeight(150)
editPriceFrame:EnableMouse(true)
editPriceFrame:SetScript("OnShow", function(self)
editPriceFrame:SetFrameStrata("DIALOG")
MoneyInputFrame_SetCopper(TSMPostPriceChangeBox, self.info.buyout)
self.linkLabel:SetText(self.info.link)
end)
editPriceFrame:SetScript("OnUpdate", function()
if not TSMAPI:AHTabIsVisible("Auctioning") then
editPriceFrame:Hide()
end
end)
frame.editPriceFrame = editPriceFrame
local linkLabel = TSMAPI.GUI:CreateLabel(editPriceFrame)
linkLabel:SetPoint("TOP", 0, -14)
linkLabel:SetJustifyH("CENTER")
linkLabel:SetText("")
editPriceFrame.linkLabel = linkLabel
local bg = editPriceFrame:CreateTexture(nil, "BACKGROUND")
bg:SetPoint("TOPLEFT", linkLabel, -2, 2)
bg:SetPoint("BOTTOMRIGHT", linkLabel, 2, -2)
TSMAPI.Design:SetContentColor(bg)
linkLabel.bg = bg
local priceBoxLabel = TSMAPI.GUI:CreateLabel(editPriceFrame)
priceBoxLabel:SetPoint("TOPLEFT", 14, -40)
priceBoxLabel:SetText(L["Auction Buyout (Stack Price):"])
editPriceFrame.priceBoxLabel = priceBoxLabel
local priceBox = CreateFrame("Frame", "TSMPostPriceChangeBox", editPriceFrame, "MoneyInputFrameTemplate")
priceBox:SetPoint("TOPLEFT", 20, -60)
priceBox:SetHeight(20)
priceBox:SetWidth(120)
editPriceFrame.priceBox = priceBox
local saveButton = TSMAPI.GUI:CreateButton(editPriceFrame, 16)
saveButton:SetPoint("BOTTOMLEFT", 10, 10)
saveButton:SetPoint("BOTTOMRIGHT", editPriceFrame, "BOTTOM", -2, 10)
saveButton:SetHeight(20)
saveButton:SetScript("OnClick", function()
TSM.Post:EditPostPrice(editPriceFrame.info.itemString, MoneyInputFrame_GetCopper(TSMPostPriceChangeBox), editPriceFrame.info.operation)
editPriceFrame:Hide()
end)
saveButton:SetText(L["Save New Price"])
editPriceFrame.saveButton = saveButton
local cancelButton = TSMAPI.GUI:CreateButton(editPriceFrame, 16)
cancelButton:SetPoint("BOTTOMLEFT", editPriceFrame, "BOTTOM", 2, 10)
cancelButton:SetPoint("BOTTOMRIGHT", -10, 10)
cancelButton:SetHeight(20)
cancelButton:SetScript("OnClick", function()
editPriceFrame:Hide()
end)
cancelButton:SetText(L["Cancel"])
editPriceFrame.cancelButton = cancelButton
return frame
end
function private:CreateInfoText(parent)
local frame = CreateFrame("Frame", nil, parent)
frame:SetAllPoints()
frame.SetInfo = function(self, info)
private:UpdateLogSTHighlight()
if type(info) == "string" then
self.icon:Hide()
self.linkText:Hide()
self.linkText.bg:Hide()
self.stackText:Hide()
self.bidText:Hide()
self.buyoutText:Hide()
self.quantityText:Hide()
self.statusText:Show()
local status, _, gold, gold2 = ("\n"):split(info)
if gold then
self.goldText:Show()
self.goldText2:Show()
self.goldText:SetText(gold)
self.goldText2:SetText(gold2)
else
self.goldText:Hide()
self.goldText2:Hide()
end
self.statusText:SetText(status)
elseif info.isReset then
self.icon:Show()
self.linkText:Show()
self.linkText.bg:Show()
self.stackText:Show()
self.bidText:Show()
self.buyoutText:Show()
self.statusText:Hide()
self.goldText:Hide()
self.goldText2:Hide()
local itemID = TSMAPI:GetItemID(info.itemString)
local total = TSM.Reset:GetTotalQuantity(info.itemString)
self.quantityText:Show()
self.quantityText:SetText(TSMAPI.Design:GetInlineColor("link")..L["Currently Owned:"].."|r "..total)
local _,link,_,_,_,_,_,_,_,texture = TSMAPI:GetSafeItemInfo(info.itemString)
self.linkText:SetText(link)
if self.linkText:GetStringWidth() > 200 then
self.linkText:SetWidth(200)
else
self.linkText:SetWidth(self.linkText:GetStringWidth())
end
self.icon.link = link
self.icon:GetNormalTexture():SetTexture(texture)
self.stackText:SetText(format(L["%s item(s) to buy/cancel"], info.num..TSMAPI.Design:GetInlineColor("link")))
self.bidText:SetText(TSMAPI.Design:GetInlineColor("link")..L["Target Price:"].."|r "..TSMAPI:FormatTextMoneyIcon(info.targetPrice))
self.buyoutText:SetText(TSMAPI.Design:GetInlineColor("link")..L["Profit:"].."|r "..TSMAPI:FormatTextMoneyIcon(info.profit))
else
self.icon:Show()
self.linkText:Show()
self.linkText.bg:Show()
self.stackText:Show()
self.bidText:Show()
self.buyoutText:Show()
self.statusText:Hide()
self.quantityText:Hide()
self.goldText:Hide()
self.goldText2:Hide()
local _,link,_,_,_,_,_,_,_,texture = TSMAPI:GetSafeItemInfo(info.itemString)
self.linkText:SetText(link)
if self.linkText:GetStringWidth() > 200 then
self.linkText:SetWidth(200)
else
self.linkText:SetWidth(self.linkText:GetStringWidth())
end
self.icon.link = link
self.icon:GetNormalTexture():SetTexture(texture)
local sText = format("%s "..TSMAPI.Design:GetInlineColor("link")..L["auctions of|r %s"], info.numStacks, info.stackSize)
self.stackText:SetText(sText)
self.bidText:SetText(TSMAPI.Design:GetInlineColor("link")..BID..":|r "..TSMAPI:FormatTextMoneyIcon(info.bid))
self.buyoutText:SetText(TSMAPI.Design:GetInlineColor("link")..BUYOUT..":|r "..TSMAPI:FormatTextMoneyIcon(info.buyout))
private.contentButtons.editPriceButton:Enable()
private.contentButtons.editPriceFrame.itemString = info.itemString
private.contentButtons.editPriceFrame.info = {itemString=info.itemString, link=link, buyout=info.buyout, operation=info.operation}
TSMAPI:CreateTimeDelay("AuctioningLogHLDelay", 0.01, function() private:UpdateLogSTHighlight(info) end)
end
end
frame.UpdateMode = function(self) end
local icon = CreateFrame("Button", nil, frame)
icon:SetPoint("TOPLEFT", 85, -20)
icon:SetWidth(50)
icon:SetHeight(50)
local tex = icon:CreateTexture()
tex:SetAllPoints(icon)
icon:SetNormalTexture(tex)
icon:SetScript("OnEnter", function(self)
if self.link and self.link ~= "" then
GameTooltip:SetOwner(self, "ANCHOR_RIGHT")
TSMAPI:SafeTooltipLink(self.link)
GameTooltip:Show()
end
end)
icon:SetScript("OnLeave", function()
--BattlePetTooltip:Hide()
GameTooltip:ClearLines()
GameTooltip:Hide()
end)
frame.icon = icon
local linkText = TSMAPI.GUI:CreateLabel(frame)
linkText:SetPoint("LEFT", icon, "RIGHT", 4, 0)
linkText:SetJustifyH("LEFT")
linkText:SetJustifyV("CENTER")
frame.linkText = linkText
local bg = frame:CreateTexture(nil, "BACKGROUND")
bg:SetPoint("TOPLEFT", linkText, -2, 2)
bg:SetPoint("BOTTOMRIGHT", linkText, 2, -2)
TSMAPI.Design:SetContentColor(bg)
linkText.bg = bg
local stackText = TSMAPI.GUI:CreateLabel(frame)
stackText:SetPoint("TOPLEFT", 350, -18)
stackText:SetWidth(175)
stackText:SetHeight(18)
stackText:SetJustifyH("LEFT")
stackText:SetJustifyV("CENTER")
frame.stackText = stackText
local bidText = TSMAPI.GUI:CreateLabel(frame)
bidText:SetPoint("TOPLEFT", 350, -38)
bidText:SetWidth(175)
bidText:SetHeight(18)
bidText:SetJustifyH("LEFT")
bidText:SetJustifyV("CENTER")
frame.bidText = bidText
local buyoutText = TSMAPI.GUI:CreateLabel(frame)
buyoutText:SetPoint("TOPLEFT", 350, -58)
buyoutText:SetWidth(175)
buyoutText:SetHeight(18)
buyoutText:SetJustifyH("LEFT")
buyoutText:SetJustifyV("CENTER")
frame.buyoutText = buyoutText
local statusText = TSMAPI.GUI:CreateLabel(frame)
statusText:SetPoint("TOP", frame, "TOPLEFT", 300, -15)
statusText:SetJustifyH("CENTER")
statusText:SetJustifyV("CENTER")
frame.statusText = statusText
local goldText = TSMAPI.GUI:CreateLabel(frame)
goldText:SetPoint("TOP", statusText, "BOTTOM", 0, -15)
goldText:SetJustifyH("CENTER")
goldText:SetJustifyV("CENTER")
frame.goldText = goldText
local goldText2 = TSMAPI.GUI:CreateLabel(frame)
goldText2:SetPoint("TOP", goldText, "BOTTOM")
goldText2:SetJustifyH("CENTER")
goldText2:SetJustifyV("CENTER")
frame.goldText2 = goldText2
local quantityText = TSMAPI.GUI:CreateLabel(frame)
quantityText:SetPoint("TOPLEFT", 535, -58)
quantityText:SetWidth(175)
quantityText:SetHeight(18)
quantityText:SetJustifyH("LEFT")
quantityText:SetJustifyV("CENTER")
frame.quantityText = quantityText
return frame
end
function private:CreateAuctionsST(parent)
local frame = CreateFrame("Frame", nil, parent)
frame:SetAllPoints()
local handlers = {
OnClick = function(_, data, self, button)
end,
}
local rt = TSMAPI:CreateAuctionResultsTable(frame, handlers)
rt:SetData({})
rt:SetSort(7, true)
rt:Hide()
return rt
end
function private:CreateLogST(parent)
local function GetPriceColumnText()
if TSM.db.global.priceColumn == 1 then
return L["Your Buyout"]
elseif TSM.db.global.priceColumn == 2 then
return L["Lowest Buyout"]
end
end
local stCols = {
{
name = L["Item"],
width = 0.31,
},
{
name = L["Operation"],
width = 0.17,
align = "Center"
},
{
name = GetPriceColumnText(),
width = 0.12,
align = "RIGHT",
},
{
name = L["Seller"],
width = 0.11,
align = "CENTER",
},
{
name = L["Info"],
width = 0.28,
align = "LEFT",
},
{
name = "",
width = 0,
},
}
local handlers = {
OnEnter = function(_, data, self)
if not data.operation then return end
local prices = TSM.Util:GetItemPrices(data.operation, data.itemString)
GameTooltip:SetOwner(self, "ANCHOR_NONE")
GameTooltip:SetPoint("BOTTOMLEFT", self, "TOPLEFT")
GameTooltip:AddLine(data.link)
GameTooltip:AddLine("Crafting Cost:".." "..(TSMAPI:FormatTextMoney(prices.cost, "|cffffffff") or "---"))
GameTooltip:AddLine(L["Minimum Price:"].." "..(TSMAPI:FormatTextMoney(prices.minPrice, "|cffffffff") or "---"))
GameTooltip:AddLine(L["Maximum Price:"].." "..(TSMAPI:FormatTextMoney(prices.maxPrice, "|cffffffff") or "---"))
GameTooltip:AddLine(L["Normal Price:"].." "..(TSMAPI:FormatTextMoney(prices.normalPrice, "|cffffffff") or "---"))
GameTooltip:AddLine(L["Lowest Buyout:"].." |r"..(TSMAPI:FormatTextMoney(data.lowestBuyout, "|cffffffff") or "---"))
GameTooltip:AddLine(L["Log Info:"].." "..data.info)
GameTooltip:AddLine("\n"..TSMAPI.Design:GetInlineColor("link2")..L["Click to show auctions for this item."].."|r".." ") -- the blank space is to fix formating.
GameTooltip:AddLine(TSMAPI.Design:GetInlineColor("link2")..format(L["Right-Click to add %s to your friends list."], "|r"..(data.seller or "---")..TSMAPI.Design:GetInlineColor("link2")).."|r")
GameTooltip:AddLine(TSMAPI.Design:GetInlineColor("link2")..L["Shift-Right-Click to show the options for this operation.".."|r"])
GameTooltip:Show()
end,
OnLeave = function()
GameTooltip:Hide()
end,
OnClick = function(_, data, _, button)
if button == "LeftButton" then
private.contentButtons:UnlockHighlight()
private.logST:Hide()
private.auctionsST:Show()
private.auctionsST.isCurrentItem = data.itemString
private:UpdateAuctionsSTData()
elseif button == "RightButton" then
if IsShiftKeyDown() then
TSMAPI:ShowOperationOptions("Auctioning", TSM.operationNameLookup[data.operation])
else
if data.seller then
AddFriend(data.seller)
else
TSM:Print(L["This item does not have any seller data."])
end
end
end
end,
OnColumnClick = function(self, button)
if self.colNum == 3 and button == "RightButton" then
TSM.db.global.priceColumn = TSM.db.global.priceColumn + 1
TSM.db.global.priceColumn = TSM.db.global.priceColumn > 2 and 1 or TSM.db.global.priceColumn
self:SetText(GetPriceColumnText())
wipe(private.logST.cache)
private:UpdateLogSTData()
end
end,
}
local st = TSMAPI:CreateScrollingTable(parent, stCols, handlers)
st:SetParent(parent)
st:SetAllPoints()
st:EnableSorting(true, 6)
st:DisableSelection(true)
return st
end
function private:UpdateAuctionsSTData()
if not private.auctionsST:IsVisible() or not private.auctionsST.sortInfo then return end
local results = {}
if private.auctionsST.isCurrentItem then
local itemString
if type(private.auctionsST.isCurrentItem) == "string" or type(private.auctionsST.isCurrentItem) == "number" then
itemString = private.auctionsST.isCurrentItem
else
itemString = TSM[private.mode]:GetCurrentItem().itemString
end
if itemString and TSM.Scan.auctionData[itemString] then
tinsert(results, TSM.Scan.auctionData[itemString])
private.auctionsST:SetExpanded(itemString, true)
end
else
for _, auction in pairs(TSM.Scan.auctionData) do
-- combine auctions with the same buyout / count / seller
tinsert(results, auction)
end
end
private.auctionsST:SetData(results)
end
function private:GetLogSTRow(record, recordIndex)
if private.logST.cache[record] then
return private.logST.cache[record]
end
local name, link = TSMAPI:GetSafeItemInfo(record.itemString)
local buyout, seller, isWhitelist, isPlayer, lowestBuyout, _
if record.reason ~= "cancelAll" then
buyout, _, seller, isWhitelist, isPlayer = TSM.Scan:GetLowestAuction(record.itemString, record.operation)
lowestBuyout = buyout
if TSM.db.global.priceColumn == 1 then
buyout = record.buyout
end
end
local sellerText
if seller then
if isPlayer then
sellerText = "|cffffff00"..seller.."|r"
elseif isWhiteList then
sellerText = TSMAPI.Design:GetInlineColor("link2")..seller.."|r"
else
sellerText = "|cffffffff"..seller.."|r"
end
else
sellerText = "|cffffffff---|r"
end
local color = TSM.Log:GetColor(record.mode, record.reason)
local infoText = (color or "|cffffffff")..(record.info or "---").."|r"
local row = {
cols = {
{
value = link,
sortArg = name or "",
},
{
value = record.operation and TSM.operationNameLookup[record.operation] or "---",
sortArg = record.operation and TSM.operationNameLookup[record.operation] or "---",
},
{
value = TSMAPI:FormatTextMoney(buyout, nil, true) or "---",
sortArg = buyout or 0,
},
{
value = sellerText,
sortArg = seller or "~",
},
{
value = infoText,
sortArg = record.info or "~",
},
{ -- invisible column at the end for default sorting
value = "",
sortArg = recordIndex,
},
},
link = link or name or itemString,
itemString = record.itemString,
operation = record.operation,
buyout = buyout,
lowestBuyout = lowestBuyout,
seller = seller,
info = infoText,
}
private.logST.cache[record] = row
return row
end
function private:UpdateLogSTData()
local rows = {}
for i, record in ipairs(TSM.Log:GetData()) do
tinsert(rows, private:GetLogSTRow(record, i))
end
private.logST:SetData(rows)
if #private.logST.rowData > private.logST.NUM_ROWS then
TSMAPI:CreateTimeDelay("logSTOffset", 0.08, function()
private.logST:SetScrollOffset(#private.logST.rowData - private.logST.NUM_ROWS)
end)
end
end
function private:UpdateLogSTHighlight(currentItem)
if not currentItem then return private.logST:SetHighlighted() end
for i=1, #private.logST.rowData do
local data = private.logST.rowData[i]
if data and data.operation == currentItem.operation and data.itemString == currentItem.itemString then
private.logST:SetHighlighted(i)
end
end
end
function private:UpdateSTData()
private:UpdateLogSTData()
private:UpdateAuctionsSTData()
end
local function SetGoldText()
local line1, line2 = TSM.Post:GetAHGoldTotal()
local text = format(L["Done Posting\n\nTotal value of your auctions: %s\nIncoming Gold: %s"], line1, line2)
private.infoText:SetInfo(text)
end
function private:Stopped(notDone)
TSM.Manage:UnregisterAllMessages()
private.buttons:Disable(true)
private.statusBar:UpdateStatus(100, 100)
private.contentButtons.currAuctionsButton:Hide()
if private.mode == "Post" then
TSMAPI:CreateTimeDelay(0.5, SetGoldText)
SetGoldText()
private.statusBar:SetStatusText(L["Post Scan Finished"])
elseif private.mode == "Cancel" then
private.infoText:SetInfo(L["Done Canceling"])
private.statusBar:SetStatusText(L["Cancel Scan Finished"])
elseif private.mode == "Reset" then
if not notDone then
private.infoText:SetInfo(L["No Items to Reset"])
end
private.statusBar:SetStatusText(L["Reset Scan Finished"])
end
private.buttons.stop:SetText(L["Restart"])
private.buttons.stop.isDone = true
end
function GUI:CreateSelectionFrame(parent)
local frame = CreateFrame("Frame", nil, parent.content)
frame:SetAllPoints()
TSMAPI.Design:SetFrameBackdropColor(frame)
local stContainer = CreateFrame("Frame", nil, frame)
stContainer:SetPoint("TOPLEFT", 5, -20)
stContainer:SetPoint("BOTTOMRIGHT", -200, 30)
TSMAPI.Design:SetFrameColor(stContainer)
frame.groupTree = TSMAPI:CreateGroupTree(stContainer, "Auctioning", "Auctioning_AH")
-- top row (auto updater)
local text = TSMAPI.GUI:CreateLabel(stContainer)
text:SetFont(TSMAPI.Design:GetContentFont(), 24)
text:SetPoint("TOP", 96, 76)
text:SetHeight(24)
text:SetJustifyH("CENTER")
text:SetJustifyV("CENTER")
text:SetText(TSMAPI.Design:GetInlineColor("link").."TSM_Auctioning")
local ag = text:CreateAnimationGroup()
local a1 = ag:CreateAnimation("Alpha")
a1:SetChange(-.5)
a1:SetDuration(.5)
ag:SetLooping("BOUNCE")
ag:Play()
local helpText = TSMAPI.GUI:CreateLabel(frame)
helpText:SetPoint("TOP", stContainer, 0, 20)
helpText:SetJustifyH("CENTER")
helpText:SetJustifyV("CENTER")
helpText:SetText(L["Select the groups which you would like to include in the scan."])
frame.helpText = helpText
local btnWidth = floor((stContainer:GetWidth() - 10)/3)
local postBtn = TSMAPI.GUI:CreateButton(frame, 16)
postBtn:SetPoint("BOTTOMLEFT", 5, 5)
postBtn:SetHeight(20)
postBtn:SetWidth(btnWidth)
postBtn:SetText(L["Start Post Scan"])
postBtn:SetScript("OnClick", function()
private.mode = "Post"
private.specialMode = nil
GUI:StartScan(parent)
end)
frame.postBtn = postBtn
local cancelBtn = TSMAPI.GUI:CreateButton(frame, 16)
cancelBtn:SetPoint("BOTTOMLEFT", postBtn, "BOTTOMRIGHT", 5, 0)
cancelBtn:SetHeight(20)
cancelBtn:SetWidth(btnWidth)
cancelBtn:SetText(L["Start Cancel Scan"])
cancelBtn:SetScript("OnClick", function()
private.mode = "Cancel"
private.specialMode = nil
GUI:StartScan(parent)
end)
frame.cancelBtn = cancelBtn
local resetBtn = TSMAPI.GUI:CreateButton(frame, 16)
resetBtn:SetPoint("BOTTOMLEFT", cancelBtn, "BOTTOMRIGHT", 5, 0)
resetBtn:SetHeight(20)
resetBtn:SetWidth(btnWidth)
resetBtn:SetText(L["Start Reset Scan"])
resetBtn:SetScript("OnClick", function()
private.mode = "Reset"
private.specialMode = nil
GUI:StartScan(parent)
end)
frame.resetBtn = resetBtn
local customScanFrame = CreateFrame("Frame", nil, frame)
customScanFrame:SetPoint("TOPLEFT", stContainer:GetWidth() + 10, 0)
customScanFrame:SetPoint("BOTTOMRIGHT")
TSMAPI.Design:SetFrameColor(customScanFrame)
private.customScanFrame = customScanFrame
local title = TSMAPI.GUI:CreateLabel(customScanFrame)
title:SetPoint("TOP", 0, -2)
title:SetJustifyH("CENTER")
title:SetJustifyV("CENTER")
title:SetText(L["Other Auctioning Searches"])
customScanFrame.title = title
TSMAPI.GUI:CreateHorizontalLine(customScanFrame, -20)
local cancelAllBtn = TSMAPI.GUI:CreateButton(customScanFrame, 16)
cancelAllBtn:SetPoint("TOPLEFT", 4, -24)
cancelAllBtn:SetPoint("TOPRIGHT", -4, -24)
cancelAllBtn:SetHeight(20)
cancelAllBtn:SetText(L["Cancel All Auctions"])
cancelAllBtn:SetScript("OnClick", function()
private.mode = "Cancel"
private.specialMode = "CancelAll"
GUI:StartScan(parent)
end)
cancelAllBtn.tooltip = L["Will cancel all your auctions, including ones which you didn't post with Auctioning."]
customScanFrame.cancelAllBtn = cancelAllBtn
TSMAPI.GUI:CreateHorizontalLine(customScanFrame, -48)
local cancelFilterText = TSMAPI.GUI:CreateLabel(customScanFrame, "small")
cancelFilterText:SetPoint("TOPLEFT", 4, -52)
cancelFilterText:SetPoint("TOPRIGHT", -4, -52)
cancelFilterText:SetJustifyH("LEFT")
cancelFilterText:SetJustifyV("CENTER")
cancelFilterText:SetText(L["Cancel Filter:"])
customScanFrame.cancelFilterText = cancelFilterText
local filterEditBox = TSMAPI.GUI:CreateInputBox(customScanFrame, "TSMAuctioningFilterSearchEditbox")
filterEditBox:SetPoint("TOPLEFT", 4, -72)
filterEditBox:SetPoint("TOPRIGHT", -4, -72)
filterEditBox:SetHeight(20)
customScanFrame.filterEditBox = filterEditBox
local cancelFilterBtn = TSMAPI.GUI:CreateButton(customScanFrame, 16)
cancelFilterBtn:SetPoint("TOPLEFT", 4, -96)
cancelFilterBtn:SetPoint("TOPRIGHT", -4, -96)
cancelFilterBtn:SetHeight(20)
cancelFilterBtn:SetText("Cancel Items Matching Filter")
cancelFilterBtn:SetScript("OnClick", function()
local filter = filterEditBox:GetText():trim()
if filter == "" then return TSM:Print(L["The filter cannot be empty. If you'd like to cancel all auctions, use the 'Cancel All Auctions' button."]) end
private.mode = "Cancel"
private.specialMode = filterEditBox:GetText()
GUI:StartScan(parent)
end)
cancelFilterBtn.tooltip = L["Will cancel all your auctions which match the specified filter, including ones which you didn't post with Auctioning."]
customScanFrame.cancelFilterBtn = cancelFilterBtn
TSMAPI.GUI:CreateHorizontalLine(customScanFrame, -120)
local durationList = {}
local durationText = {L["Under 30min"], L["30min to 2hrs"], L["2 to 12 hrs"]}
for i=1, 3 do -- go up to long duration
durationList[i] = format("%s (%s)", _G["AUCTION_TIME_LEFT"..i], durationText[i])
end
local cancelDurationDropdown = TSMAPI.GUI:CreateDropdown(customScanFrame, durationList, L["Select a duration in this dropdown and click on the button below to cancel all auctions at or below this duration."])
cancelDurationDropdown:SetPoint("TOPLEFT", 2, -124)
cancelDurationDropdown:SetPoint("TOPRIGHT", 0, -124)
cancelDurationDropdown:SetHeight(20)
cancelDurationDropdown:SetLabel(L["Low Duration"])
cancelDurationDropdown:SetValue(1)
local cancelDurationBtn = TSMAPI.GUI:CreateButton(customScanFrame, 16)
cancelDurationBtn:SetPoint("TOPLEFT", 4, -172)
cancelDurationBtn:SetPoint("TOPRIGHT", -4, -172)
cancelDurationBtn:SetHeight(20)
cancelDurationBtn:SetText(L["Cancel Low Duration"])
cancelDurationBtn:SetScript("OnClick", function()
private.mode = "Cancel"
private.specialMode = cancelDurationDropdown:GetValue()
GUI:StartScan(parent)
end)
cancelDurationBtn.tooltip = L["Will cancel all your auctions at or below the specified duration, including ones you didn't post with Auctioning."]
customScanFrame.cancelDurationBtn = cancelDurationBtn
TSMAPI.GUI:CreateHorizontalLine(customScanFrame, -196)
return frame
end
function GUI:CreateScanFrame(parent)
local frame = CreateFrame("Frame", nil, parent)
frame:SetAllPoints()
local contentFrame = CreateFrame("Frame", nil, frame)
contentFrame:SetAllPoints(parent.content)
TSMAPI.Design:SetFrameColor(contentFrame)
frame.content = contentFrame
local statusBarFrame = CreateFrame("Frame", nil, frame.content)
statusBarFrame:SetPoint("TOPLEFT", frame.content, "BOTTOMLEFT", 165, -2)
statusBarFrame:SetWidth(355)
statusBarFrame:SetHeight(30)
private.statusBar = TSMAPI.GUI:CreateStatusBar(statusBarFrame, "TSMAuctioningStatusBar")
private.buttons = private:CreateButtons(frame)
private.contentButtons = private.contentButtons or private:CreateContentButtons(frame)
private.contentButtons:Show()
private.contentButtons:UpdateMode()
private.infoText = private.infoText or private:CreateInfoText(frame)
private.infoText:Show()
private.auctionsST = private:CreateAuctionsST(frame.content)
private.logST = private:CreateLogST(frame.content)
return frame
end
function GUI:StartScan(frame)
private.selectionFrame:Hide()
private.scanFrame = private.scanFrame or GUI:CreateScanFrame(frame)
private.scanFrame:Show()
private.statusBar:Show()
private.buttons:Show()
private.buttons:UpdateMode()
private.buttons:Disable()
private.buttons.stop.isDone = nil
private.buttons.stop:SetText(L["Stop"])
private.contentButtons:Show()
private.contentButtons:UpdateMode()
private.infoText:Show()
private.contentButtons.logButton:Click()
private.auctionsST:SetData({})
private.logST:SetData({})
private.logST.cache = {}
if private.mode == "Reset" then
private.buttons:Hide()
private.contentButtons:Hide()
private.auctionsST:Hide()
private.logST:Hide()
TSM.Reset:Show(frame)
end
local options = {itemOperations={}}
if private.specialMode then
options.specialMode = private.specialMode
else
for groupName, data in pairs(private.selectionFrame.groupTree:GetSelectedGroupInfo()) do
groupName = TSMAPI:FormatGroupPath(groupName, true)
for _, opName in ipairs(data.operations) do
TSMAPI:UpdateOperation("Auctioning", opName)
local opSettings = TSM.operations[opName]
if not opSettings then
-- operation doesn't exist anymore in Auctioning
TSM:Printf(L["'%s' has an Auctioning operation of '%s' which no longer exists. Auctioning will ignore this group until this is fixed."], groupName, opName)
else
-- it's a valid operation
TSM.operationNameLookup[opSettings] = opName
for itemString in pairs(data.items) do
options.itemOperations[itemString] = options.itemOperations[itemString] or {}
tinsert(options.itemOperations[itemString], opSettings)
end
end
end
end
end
TSMAPI:CreateTimeDelay("aucStartDelay", 0.1, function() TSM.Manage:StartScan(private, options) end)
end
function GUI:ShowSelectionFrame(frame)
if private.scanFrame then private.scanFrame:Hide() end
private.selectionFrame = private.selectionFrame or GUI:CreateSelectionFrame(frame)
private.selectionFrame:Show()
TSMAPI.AuctionScan:StopScan()
end
function GUI:HideSelectionFrame()
private.selectionFrame:Hide()
if private.scanFrame then private.scanFrame:Hide() end
TSMAPI.AuctionScan:StopScan()
TSM.Reset:Hide()
end
@@ -0,0 +1,86 @@
-- ------------------------------------------------------------------------------ --
-- TradeSkillMaster_Auctioning --
-- http://www.curse.com/addons/wow/tradeskillmaster_auctioning --
-- --
-- A TradeSkillMaster Addon (http://tradeskillmaster.com) --
-- All Rights Reserved* - Detailed license information included with addon. --
-- ------------------------------------------------------------------------------ --
local TSM = select(2, ...)
local Log = TSM:NewModule("Log", "AceEvent-3.0")
local L = LibStub("AceLocale-3.0"):GetLocale("TradeSkillMaster_Auctioning")
local records = {}
local RED = "|cffff2211"
local ORANGE = "|cffff8811"
local GREEN = "|cff22ff22"
local CYAN = "|cff99ffff"
local info = {
post = {
invalid = {L["Item/Group is invalid."], RED},
notEnough = {L["Not enough items in bags."], ORANGE},
belowMinPrice = {L["Cheapest auction below min price."], ORANGE},
tooManyPosted = {L["Maximum amount already posted."], CYAN},
postingNormal = {L["Posting at normal price."], GREEN},
postingResetMin = {L["Below min price. Posting at min price."], GREEN},
postingResetMax = {L["Below min price. Posting at max price."], GREEN},
postingResetNormal = {L["Below min price. Posting at normal price."], GREEN},
aboveMaxMin = {L["Above max price. Posting at min price."], GREEN},
aboveMaxMax = {L["Above max price. Posting at max price."], GREEN},
aboveMaxNormal = {L["Above max price. Posting at normal price."], GREEN},
postingPlayer = {L["Posting at your current price."], GREEN},
postingWhitelist = {L["Posting at whitelisted player's price."], GREEN},
notPostingWhitelist = {L["Lowest auction by whitelisted player."], ORANGE},
postingUndercut = {L["Undercutting competition."], GREEN},
invalidSeller = {L["Invalid seller data returned by server."], RED},
},
cancel = {
bid = {L["Auction has been bid on."], CYAN},
atReset = {L["Not canceling auction at reset price."], GREEN},
reset = {L["Canceling to repost at reset price."], CYAN},
belowMinPrice = {L["Not canceling auction below min price."], ORANGE},
undercut = {L["You've been undercut."], RED},
whitelistUndercut = {L["Undercut by whitelisted player."], RED},
atNormal = {L["At normal price and not undercut."], GREEN},
atAboveMax = {L["At above max price and not undercut."], GREEN},
repost = {L["Canceling to repost at higher price."], CYAN},
notUndercut = {L["Your auction has not been undercut."], GREEN},
cancelAll = {L["Canceling all auctions."], CYAN},
notLowest = {L["Canceling auction which you've undercut."], CYAN},
invalidSeller = {L["Invalid seller data returned by server."], RED},
atWhitelist = {L["Posted at whitelisted player's price."], GREEN},
keepPosted = {L["Keeping undercut auctions posted."], CYAN},
},
}
function Log:GetInfo(mode, reason)
return info[mode][reason] and info[mode][reason][1]
end
function Log:GetColor(mode, reason)
return mode and reason and info[mode] and info[mode][reason] and info[mode][reason][2]
end
function Log:AddLogRecord(itemString, mode, action, reason, operation, buyout)
local info = Log:GetInfo(mode, reason)
local record = {itemString=itemString, info=info, action=action, mode=mode, reason=reason, operation=operation, buyout=buyout}
tinsert(records, record)
end
function Log:GetInfoForItem(itemString)
for _, record in ipairs(records) do
if record.itemString == itemString then
return record.info
end
end
end
function Log:GetData()
return records
end
function Log:Clear()
wipe(records)
end
@@ -0,0 +1,823 @@
-- ------------------------------------------------------------------------------ --
-- TradeSkillMaster_Auctioning --
-- http://www.curse.com/addons/wow/tradeskillmaster_auctioning --
-- --
-- A TradeSkillMaster Addon (http://tradeskillmaster.com) --
-- All Rights Reserved* - Detailed license information included with addon. --
-- ------------------------------------------------------------------------------ --
-- load the parent file (TSM) into a local variable and register this file as a module
local TSM = select(2, ...)
local Options = TSM:NewModule("Options", "AceEvent-3.0", "AceHook-3.0")
local L = LibStub("AceLocale-3.0"):GetLocale("TradeSkillMaster_Auctioning") -- loads the localization table
local AceGUI = LibStub("AceGUI-3.0") -- load the AceGUI libraries
function Options:Load(parent, operation, group)
Options.treeGroup = AceGUI:Create("TSMTreeGroup")
Options.treeGroup:SetLayout("Fill")
Options.treeGroup:SetCallback("OnGroupSelected", function(...) Options:SelectTree(...) end)
Options.treeGroup:SetStatusTable(TSM.db.global.optionsTreeStatus)
parent:AddChild(Options.treeGroup)
Options:UpdateTree()
if operation then
if operation == "" then
Options.currentGroup = group
Options.treeGroup:SelectByPath(3)
Options.currentGroup = nil
else
Options.treeGroup:SelectByPath(3, operation)
end
else
Options.treeGroup:SelectByPath(1)
end
end
function Options:UpdateTree()
local operationTreeChildren = {}
for name in pairs(TSM.operations) do
tinsert(operationTreeChildren, { value = name, text = name })
end
sort(operationTreeChildren, function(a, b) return a.value < b.value end)
Options.treeGroup:SetTree({ { value = 1, text = L["Options"] }, { value = 2, text = L["Whitelist"] }, { value = 3, text = L["Operations"], children = operationTreeChildren } })
end
function Options:SelectTree(treeGroup, _, selection)
treeGroup:ReleaseChildren()
local major, minor = ("\001"):split(selection)
major = tonumber(major)
if major == 1 then
Options:DrawGeneralSettings(treeGroup)
elseif major == 2 then
Options:DrawWhitelistSettings(treeGroup)
elseif minor then
Options:DrawOperationSettings(treeGroup, minor)
else
Options:DrawNewOperation(treeGroup)
end
end
function Options:DrawGeneralSettings(container)
local macroOptions = { down = true, up = true, ctrl = true, shift = false, alt = false }
local page = {
{
type = "ScrollFrame",
layout = "list",
children = {
{
type = "InlineGroup",
layout = "flow",
title = L["General Options"],
children = {
{
type = "CheckBox",
label = L["Cancel Auctions with Bids"],
settingInfo = { TSM.db.global, "cancelWithBid" },
tooltip = L["Will cancel auctions even if they have a bid on them, you will take an additional gold cost if you cancel an auction with bid."],
},
{
type = "CheckBox",
label = L["Round Normal Price"],
settingInfo = { TSM.db.global, "roundNormalPrice" },
tooltip = L["If checked, whenever you post an item at its normal price, the buyout will be rounded up to the nearest gold."],
},
{
type = "CheckBox",
label = L["Disable Invalid Price Warnings"],
settingInfo = { TSM.db.global, "disableInvalidMsg" },
tooltip = L["If checked, TSM will not print out a chat message when you have an invalid price for an item. However, it will still show as invalid in the log."],
},
{
type = "Dropdown",
label = L["Default Operation Tab"],
list = { L["General"], L["Post"], L["Cancel"], L["Reset"] },
settingInfo = { TSM.db.global, "defaultOperationTab" },
tooltip = L["This dropdown determines the default tab when you visit an operation."],
},
{
type = "Dropdown",
label = L["Enable Sounds"],
list = {L["None"], "AuctionWindowOpen", "Fishing Reel in", "HumanExploration", "LEVELUP", "MapPing", "MONEYFRAMEOPEN", "QUESTCOMPLETED", "ReadyCheck"},
settingInfo = { TSM.db.global, "scanCompleteSound" },
tooltip = L["Play the selected sound when a post / cancel scan is complete and items are ready to be posted / canceled (the gray bar is all the way across).Select None to disable sounds"],
},
{
type = "Button",
text = L["Test Selected Sound"],
callback = function()
if TSM.db.global.scanCompleteSound ~= 1 then
PlaySound(TSM.Options:GetScanCompleteSound(TSM.db.global.scanCompleteSound), "Master")
end
end,
},
},
},
{
type = "Spacer",
},
{
type = "InlineGroup",
layout = "flow",
title = L["Macro Help"],
children = {
{
type = "Label",
text = format(L["There are two ways of making clicking the Post / Cancel Auction button easier. You can put %s and %s in a macro (on separate lines), or use the utility below to have a macro automatically made and bound to scrollwheel for you."], "\"" .. TSMAPI.Design:GetInlineColor("link") .. "/click TSMAuctioningPostButton|r\"", "\"" .. TSMAPI.Design:GetInlineColor("link") .. "/click TSMAuctioningCancelButton|r\""),
relativeWidth = 1,
},
{
type = "HeadingLine"
},
{
type = "Label",
text = L["ScrollWheel Direction (both recommended):"],
relativeWidth = 0.59,
},
{
type = "CheckBox",
label = L["Up"],
relativeWidth = 0.2,
settingInfo = { macroOptions, "up" },
tooltip = L["Will bind ScrollWheelUp (plus modifiers below) to the macro created."],
},
{
type = "CheckBox",
label = L["Down"],
relativeWidth = 0.2,
settingInfo = { macroOptions, "down" },
tooltip = L["Will bind ScrollWheelDown (plus modifiers below) to the macro created."],
},
{
type = "Label",
text = L["Modifiers:"],
relativeWidth = 0.24,
fontObject = GameFontNormal,
},
{
type = "CheckBox",
label = "ALT",
relativeWidth = 0.25,
settingInfo = { macroOptions, "alt" },
},
{
type = "CheckBox",
label = "CTRL",
relativeWidth = 0.25,
settingInfo = { macroOptions, "ctrl" },
},
{
type = "CheckBox",
label = "SHIFT",
relativeWidth = 0.25,
settingInfo = { macroOptions, "shift" },
},
{
type = "Button",
relativeWidth = 1,
text = L["Create Macro and Bind ScrollWheel (with selected options)"],
callback = function()
DeleteMacro("TSMAucBClick")
CreateMacro("TSMAucBClick", 1, "/click TSMAuctioningCancelButton\n/click TSMAuctioningPostButton")
local modString = ""
if macroOptions.ctrl then
modString = modString .. "CTRL-"
end
if macroOptions.alt then
modString = modString .. "ALT-"
end
if macroOptions.shift then
modString = modString .. "SHIFT-"
end
local bindingNum = GetCurrentBindingSet()
bindingNum = (bindingNum == 1) and 2 or 1
if macroOptions.up then
SetBinding(modString .. "MOUSEWHEELUP", nil, bindingNum)
SetBinding(modString .. "MOUSEWHEELUP", "MACRO TSMAucBClick", bindingNum)
end
if macroOptions.down then
SetBinding(modString .. "MOUSEWHEELDOWN", nil, bindingNum)
SetBinding(modString .. "MOUSEWHEELDOWN", "MACRO TSMAucBClick", bindingNum)
end
SaveBindings(2)
TSM:Print(L["Macro created and keybinding set!"])
end,
},
},
},
},
},
}
TSMAPI:BuildPage(container, page)
end
function Options:DrawWhitelistSettings(container)
local function AddPlayer(self, _, value)
value = string.trim(strlower(value or ""))
if value == "" then return TSM:Print(L["No name entered."]) end
if TSM.db.factionrealm.whitelist[value] then
TSM:Printf(L["The player \"%s\" is already on your whitelist."], TSM.db.factionrealm.whitelist[value])
return
end
for player in pairs(TSM.db.factionrealm.player) do
if strlower(player) == value then
TSM:Printf(L["You do not need to add \"%s\", alts are whitelisted automatically."], player)
return
end
end
TSM.db.factionrealm.whitelist[strlower(value)] = value
container:SelectByPath(2)
end
local page = {
{
-- scroll frame to contain everything
type = "ScrollFrame",
layout = "List",
children = {
{
type = "InlineGroup",
layout = "flow",
title = L["Help"],
children = {
{
type = "Label",
relativeWidth = 1,
fontObject = GameFontNormal,
text = L["Whitelists allow you to set other players besides you and your alts that you do not want to undercut; however, if somebody on your whitelist matches your buyout but lists a lower bid it will still consider them undercutting."],
},
{
type = "CheckBox",
relativeWidth = 0.49,
label = L["Match Whitelist Players"],
settingInfo = { TSM.db.global, "matchWhitelist" },
tooltip = L["If enabled, instead of not posting when a whitelisted player has an auction posted, Auctioning will match their price."],
},
},
},
{
type = "InlineGroup",
layout = "flow",
title = L["Add player"],
children = {
{
type = "EditBox",
label = L["Player name"],
relativeWidth = 0.5,
callback = AddPlayer,
tooltip = L["Add a new player to your whitelist."],
},
},
},
{
type = "InlineGroup",
layout = "flow",
title = L["Whitelist"],
children = {},
},
},
},
}
for name in pairs(TSM.db.factionrealm.whitelist) do
tinsert(page[1].children[3].children,
{
type = "Label",
text = TSM.db.factionrealm.whitelist[name],
fontObject = GameFontNormal,
})
tinsert(page[1].children[3].children,
{
type = "Button",
text = L["Delete"],
relativeWidth = 0.3,
callback = function(self)
TSM.db.factionrealm.whitelist[name] = nil
container:SelectByPath(2)
end,
})
end
if #(page[1].children[3].children) == 0 then
tinsert(page[1].children[3].children,
{
type = "Label",
text = L["You do not have any players on your whitelist yet."],
fontObject = GameFontNormal,
relativeWidth = 1,
})
end
TSMAPI:BuildPage(container, page)
end
function Options:DrawNewOperation(container)
local currentGroup = Options.currentGroup
local page = {
{
-- scroll frame to contain everything
type = "ScrollFrame",
layout = "List",
children = {
{
type = "InlineGroup",
layout = "flow",
title = L["New Operation"],
children = {
{
type = "Label",
text = L["Auctioning operations contain settings for posting, canceling, and resetting items in a group. Type the name of the new operation into the box below and hit 'enter' to create a new Crafting operation."],
relativeWidth = 1,
},
{
type = "EditBox",
label = L["Operation Name"],
relativeWidth = 0.8,
callback = function(self, _, name)
name = (name or ""):trim()
if name == "" then return end
if TSM.operations[name] then
self:SetText("")
return TSM:Printf(L["Error creating operation. Operation with name '%s' already exists."], name)
end
TSM.operations[name] = CopyTable(TSM.operationDefaults)
Options:UpdateTree()
Options.treeGroup:SelectByPath(3, name)
TSMAPI:NewOperationCallback("Auctioning", currentGroup, name)
end,
tooltip = L["Give the new operation a name. A descriptive name will help you find this operation later."],
},
},
},
},
},
}
TSMAPI:BuildPage(container, page)
end
function Options:DrawOperationSettings(container, operationName)
local tg = AceGUI:Create("TSMTabGroup")
tg:SetLayout("Fill")
tg:SetFullHeight(true)
tg:SetFullWidth(true)
tg:SetTabs({ { value = 1, text = L["General"] }, { value = 2, text = L["Post"] }, { value = 3, text = L["Cancel"] }, { value = 4, text = L["Reset"] }, { value = 5, text = TSMAPI.Design:GetInlineColor("advanced") .. L["Relationships"] .. "|r" }, { value = 6, text = L["Management"] } })
tg:SetCallback("OnGroupSelected", function(self, _, value)
tg:ReleaseChildren()
TSMAPI:UpdateOperation("Auctioning", operationName)
if value == 1 then
Options:DrawOperationGeneral(self, operationName)
elseif value == 2 then
Options:DrawOperationPost(self, operationName)
elseif value == 3 then
Options:DrawOperationCancel(self, operationName)
elseif value == 4 then
Options:DrawOperationReset(self, operationName)
elseif value == 5 then
Options:DrawOperationRelationships(self, operationName)
elseif value == 6 then
TSMAPI:DrawOperationManagement(TSM, self, operationName)
end
end)
container:AddChild(tg)
tg:SelectTab(TSM.db.global.defaultOperationTab)
end
function Options:DrawOperationGeneral(container, operationName)
local operation = TSM.operations[operationName]
local durationList = { [0] = L["<none>"] }
for i = 1, 3 do -- go up to long duration
durationList[i] = format("%s (%s)", _G["AUCTION_TIME_LEFT" .. i], _G["AUCTION_TIME_LEFT" .. i .. "_DETAIL"])
end
local page = {
{
type = "ScrollFrame",
layout = "list",
children = {
{
type = "InlineGroup",
layout = "flow",
title = L["General Operation Options"],
children = {
{
type = "CheckBox",
label = L["Match Stack Size"],
settingInfo = { operation, "matchStackSize" },
disabled = operation.relationships.matchStackSize,
tooltip = L["If checked, Auctioning will ignore all auctions that are posted at a different stack size than your auctions. For example, if there are stacks of 1, 5, and 20 up and you're posting in stacks of 1, it'll ignore all stacks of 5 and 20."],
},
{
type = "Dropdown",
label = L["Ignore Low Duration Auctions"],
settingInfo = { operation, "ignoreLowDuration" },
relativeWidth = 0.5,
list = durationList,
disabled = operation.relationships.ignoreLowDuration,
tooltip = L["Any auctions at or below the selected duration will be ignored. Selecting \"<none>\" will cause no auctions to be ignored based on duration."],
},
},
},
},
},
}
TSMAPI:BuildPage(container, page)
end
function Options:DrawOperationPost(container, operationName)
local operation = TSM.operations[operationName]
local page = {
{
type = "ScrollFrame",
layout = "list",
children = {
{
type = "InlineGroup",
layout = "flow",
title = L["Auction Settings"],
children = {
{
type = "Dropdown",
label = L["Duration"],
settingInfo = { operation, "duration" },
relativeWidth = 0.5,
list = { [12] = AUCTION_DURATION_ONE, [24] = AUCTION_DURATION_TWO, [48] = AUCTION_DURATION_THREE },
disabled = operation.relationships.duration,
tooltip = L["How long auctions should be up for."],
},
{
type = "Slider",
label = L["Post Cap"],
settingInfo = { operation, "postCap" },
relativeWidth = 0.49,
min = 0,
max = 500,
step = 1,
disabled = operation.relationships.postCap,
tooltip = L["How many auctions at the lowest price tier can be up at any one time. Setting this to 0 disables posting for any groups this operation is applied to."],
},
{
type = "Slider",
label = L["Stack Size"],
settingInfo = { operation, "stackSize" },
min = 1,
max = 1000,
step = 1,
relativeWidth = 0.5,
disabled = operation.relationships.stackSize,
tooltip = L["How many items should be in a single auction, 20 will mean they are posted in stacks of 20."],
},
{
type = "CheckBox",
label = L["Use Stack Size as Cap"],
settingInfo = { operation, "stackSizeIsCap" },
disabled = operation.relationships.stackSizeIsCap,
tooltip = L["If you don't have enough items for a full post, it will post with what you have."],
},
{
type = "Slider",
label = L["Keep Quantity"],
settingInfo = { operation, "keepQuantity" },
min = 0,
max = 1000,
step = 1,
relativeWidth = 0.5,
tooltip = L["How many items you want to keep in your bags and not have Auctioning post."],
},
},
},
{
type = "Spacer",
},
{
type = "InlineGroup",
layout = "flow",
title = L["Auction Price Settings"],
children = {
{
type = "Slider",
label = L["Bid percent"],
settingInfo = { operation, "bidPercent" },
isPercent = true,
min = 0,
max = 1,
step = 0.01,
relativeWidth = 0.5,
disabled = operation.relationships.bidPercent,
tooltip = L["Percentage of the buyout as bid, if you set this to 90% then a 100g buyout will have a 90g bid."],
},
{
type = "EditBox",
label = L["Undercut Amount"],
settingInfo = { operation, "undercut" },
relativeWidth = 0.49,
acceptCustom = true,
disabled = operation.relationships.undercut,
tooltip = L["How much to undercut other auctions by. Format is in \"#g#s#c\". For example, \"50g30s\" means 50 gold, 30 silver, and no copper."],
},
},
},
{
type = "Spacer",
},
{
type = "InlineGroup",
layout = "flow",
title = L["Posting Price Settings"],
children = {
{
type = "EditBox",
label = L["Minimum Price"],
settingInfo = { operation, "minPrice" },
relativeWidth = 0.49,
acceptCustom = true,
disabled = operation.relationships.minPrice,
tooltip = L["The lowest price you want an item to be posted for. Auctioning will not undercut auctions below this price."],
},
{
type = "Dropdown",
label = L["When Below Minimum"],
relativeWidth = 0.5,
list = { ["none"] = L["Don't Post Items"], ["minPrice"] = L["Post at Minimum Price"], ["maxPrice"] = L["Post at Maximum Price"], ["normalPrice"] = L["Post at Normal Price"], ["ignore"] = L["Ignore Auctions Below Minimum"] },
settingInfo = { operation, "priceReset" },
disabled = operation.relationships.priceReset,
tooltip = L["This dropdown determines what Auctioning will do when the market for an item goes below your minimum price. You can not post the items, post at one of your configured prices, or have Auctioning ignore all the auctions below your minimum price (and likely undercut the lowest auction above your mimimum price)."],
},
{
type = "EditBox",
label = L["Maximum Price"],
settingInfo = { operation, "maxPrice" },
relativeWidth = 0.49,
acceptCustom = true,
disabled = operation.relationships.maxPrice,
tooltip = L["The maximum price you want an item to be posted for. Auctioning will not undercut auctions above this price."],
},
{
type = "Dropdown",
label = L["When Above Maximum"],
relativeWidth = 0.5,
list = { ["minPrice"] = L["Post at Minimum Price"], ["maxPrice"] = L["Post at Maximum Price"], ["normalPrice"] = L["Post at Normal Price"] },
settingInfo = { operation, "aboveMax" },
disabled = operation.relationships.aboveMax,
tooltip = L["This dropdown determines what Auctioning will do when the market for an item goes above your maximum price. You can post the items at one of your configured prices."],
},
{
type = "EditBox",
label = L["Normal Price"],
settingInfo = { operation, "normalPrice" },
relativeWidth = 0.49,
acceptCustom = true,
disabled = operation.relationships.normalPrice,
tooltip = L["Price to post at if there are none of an item currently on the AH."],
},
},
},
},
},
}
TSMAPI:BuildPage(container, page)
end
function Options:DrawOperationCancel(container, operationName)
local operation = TSM.operations[operationName]
local page = {
{
type = "ScrollFrame",
layout = "list",
children = {
{
type = "InlineGroup",
layout = "flow",
title = L["Cancel Settings"],
children = {
{
type = "CheckBox",
label = L["Cancel Undercut Auctions"],
settingInfo = { operation, "cancelUndercut" },
callback = function() container:ReloadTab() end,
disabled = operation.relationships.cancelUndercut,
tooltip = L["If checked, a cancel scan will cancel any auctions which have been undercut and are still above your minimum price."],
},
{
type = "Slider",
label = L["Keep Posted"],
settingInfo = { operation, "keepPosted" },
disabled = not operation.cancelUndercut or operation.relationships.keepPosted,
relativeWidth = 0.49,
min = 0,
max = 500,
step = 1,
tooltip = L["This number of undercut auctions will be kept on the auction house (not canceled) when doing a cancel scan."],
},
{
type = "CheckBox",
label = L["Cancel to Repost Higher"],
settingInfo = { operation, "cancelRepost" },
callback = function() container:ReloadTab() end,
disabled = operation.relationships.cancelRepost,
tooltip = L["If checked, a cancel scan will cancel any auctions which can be reposted for a higher price."],
},
{
type = "EditBox",
label = L["Repost Higher Threshold"],
settingInfo = { operation, "cancelRepostThreshold" },
disabled = not operation.cancelRepost or operation.relationships.cancelRepostThreshold,
relativeWidth = 0.49,
acceptCustom = true,
tooltip = L["If an item can't be posted for at least this amount higher than its current value, it won't be canceled to repost higher."],
},
},
},
},
},
}
TSMAPI:BuildPage(container, page)
end
function Options:DrawOperationReset(container, operationName)
local operation = TSM.operations[operationName]
local page = {
{
type = "ScrollFrame",
layout = "list",
children = {
{
type = "InlineGroup",
layout = "flow",
title = L["General Reset Settings"],
children = {
{
type = "CheckBox",
label = L["Enable Reset Scan"],
relativeWidth = 1,
settingInfo = { operation, "resetEnabled" },
callback = function() container:ReloadTab() end,
disabled = operation.relationships.resetEnabled,
tooltip = L["If checked, groups which the opperation applies to will be included in a reset scan."],
},
{
type = "Slider",
label = L["Max Quantity to Buy"],
settingInfo = { operation, "resetMaxQuantity" },
disabled = not operation.resetEnabled or operation.relationships.resetMaxQuantity,
relativeWidth = 0.5,
min = 1,
max = 1000,
step = 1,
tooltip = L["This is the maximum quantity of an item you want to buy in a single reset scan."],
},
{
type = "Slider",
label = L["Max Inventory Quantity"],
settingInfo = { operation, "resetMaxInventory" },
disabled = not operation.resetEnabled or operation.relationships.resetMaxInventory,
relativeWidth = 0.49,
min = 1,
max = 1000,
step = 1,
tooltip = L["This is the maximum quantity of an item you want to have in your inventory after a reset scan."],
},
{
type = "EditBox",
label = L["Max Reset Cost"],
settingInfo = { operation, "resetMaxCost" },
disabled = not operation.resetEnabled or operation.relationships.resetMaxCost,
relativeWidth = 0.49,
acceptCustom = true,
tooltip = L["The maximum amount that you want to spend in order to reset a particular item. This is the total amount, not a per-item amount."],
},
{
type = "EditBox",
label = L["Min Reset Profit"],
settingInfo = { operation, "resetMinProfit" },
disabled = not operation.resetEnabled or operation.relationships.resetMinProfit,
relativeWidth = 0.49,
acceptCustom = true,
tooltip = L["The minimum profit you would want to make from doing a reset. This is a per-item price where profit is the price you reset to minus the average price you spent per item."],
},
{
type = "EditBox",
label = L["Price Resolution"],
settingInfo = { operation, "resetResolution" },
disabled = not operation.resetEnabled or operation.relationships.resetResolution,
relativeWidth = 0.49,
acceptCustom = true,
tooltip = L["This determines what size range of prices should be considered a single price point for the reset scan. For example, if this is set to 1s, an auction at 20g50s20c and an auction at 20g49s45c will both be considered to be the same price level."],
},
{
type = "EditBox",
label = L["Max Cost Per Item"],
settingInfo = { operation, "resetMaxItemCost" },
disabled = not operation.resetEnabled or operation.relationships.resetMaxItemCost,
relativeWidth = 0.49,
acceptCustom = true,
tooltip = L["This is the maximum amount you want to pay for a single item when reseting."],
},
},
},
},
},
}
TSMAPI:BuildPage(container, page)
end
function Options:DrawOperationRelationships(container, operationName)
local settingInfo = {
{
label = L["General Settings"],
{ key = "matchStackSize", label = L["Match Stack Size"] },
{ key = "ignoreLowDuration", label = L["Ignore Low Duration Auctions"] },
},
{
label = L["Post Settings"],
{ key = "duration", label = L["Duration"] },
{ key = "postCap", label = L["Post Cap"] },
{ key = "stackSize", label = L["Stack Size"] },
{ key = "stackSizeIsCap", label = L["Use Stack Size as Cap"] },
{ key = "keepQuantity", label = L["Keep Quantity"] },
{ key = "bidPercent", label = L["Bid percent"] },
{ key = "undercut", label = L["Undercut Amount"] },
{ key = "minPrice", label = L["Minimum Price"] },
{ key = "priceReset", label = L["When Below Minimum"] },
{ key = "maxPrice", label = L["Maximum Price"] },
{ key = "aboveMax", label = L["When Above Maximum"] },
{ key = "normalPrice", label = L["Normal Price"] },
},
{
label = L["Cancel Settings"],
{ key = "cancelUndercut", label = L["Cancel Undercut Auctions"] },
{ key = "keepPosted", label = L["Keep Posted"] },
{ key = "cancelRepost", label = L["Cancel to Repost Higher"] },
{ key = "cancelRepostThreshold", label = L["Repost Higher Threshold"] },
},
{
label = L["Reset Settings"],
{ key = "resetEnabled", label = L["Enable Reset Scan"] },
{ key = "resetMaxQuantity", label = L["Max Quantity to Buy"] },
{ key = "resetMaxInventory", label = L["Max Inventory Quantity"] },
{ key = "resetMaxCost", label = L["Max Reset Cost"] },
{ key = "resetMinProfit", label = L["Min Reset Profit"] },
{ key = "resetResolution", label = L["Price Resolution"] },
{ key = "resetMaxItemCost", label = L["Max Cost Per Item"] },
},
}
TSMAPI:ShowOperationRelationshipTab(TSM, container, TSM.operations[operationName], settingInfo)
end
function Options:LoadTooltipOptions(container)
local page = {
{
type = "SimpleGroup",
layout = "Flow",
fullHeight = true,
children = {
{
type = "CheckBox",
label = L["Show Auctioning values in Tooltip"],
settingInfo = { TSM.db.global, "tooltip" },
callback = function() container:ReloadTab() end,
tooltip = L["If checked, the minimum, normal and maximum prices of the first operation for the item will be shown in tooltips."],
},
},
},
}
TSMAPI:BuildPage(container, page)
end
function Options:GetScanCompleteSound(index)
--L["None"], "AuctionWindowOpen", "Fishing Reel in", "HumanExploration", "LEVELUP", "MapPing", "MONEYFRAMEOPEN", "QUESTCOMPLETED", "ReadyCheck"
if index == 2 then
return "AuctionWindowOpen"
elseif index == 3 then
return "Fishing Reel in"
elseif index == 4 then
return "HumanExploration"
elseif index == 5 then
return "LEVELUP"
elseif index == 6 then
return "MapPing"
elseif index == 7 then
return "MONEYFRAMEOPEN"
elseif index == 8 then
return "QUESTCOMPLETED"
elseif index == 9 then
return "ReadyCheck"
end
end
@@ -0,0 +1,527 @@
-- ------------------------------------------------------------------------------ --
-- TradeSkillMaster_Auctioning --
-- http://www.curse.com/addons/wow/tradeskillmaster_auctioning --
-- --
-- A TradeSkillMaster Addon (http://tradeskillmaster.com) --
-- All Rights Reserved* - Detailed license information included with addon. --
-- ------------------------------------------------------------------------------ --
local TSM = select(2, ...)
local Post = TSM:NewModule("Post", "AceEvent-3.0")
local L = LibStub("AceLocale-3.0"):GetLocale("TradeSkillMaster_Auctioning") -- loads the localization table
local bagInfo, bagState = {}, {}
local bagInfoUpdate = 0
local postQueue, currentItem, itemLocations = {}, {}, {}
local totalToPost, totalPosted, count = 0, 0, 0
local isScanning, GUI
function Post:ValidateOperation(itemString, operation)
local itemLink, salePrice = TSMAPI:Select({2, 11}, TSMAPI:GetSafeItemInfo(itemString))
local prices = TSM.Util:GetItemPrices(operation, itemString)
-- don't post this item if their settings are invalid
if operation.postCap == 0 then
return -- posting is disabled
elseif not prices.minPrice then
if not TSM.db.global.disableInvalidMsg then
TSM:Printf(L["Did not post %s because your minimum price (%s) is invalid. Check your settings."], itemLink or itemString, operation.minPrice)
end
TSM.Log:AddLogRecord(itemString, "post", "Skip", "invalid", operation)
elseif not prices.maxPrice then
if not TSM.db.global.disableInvalidMsg then
TSM:Printf(L["Did not post %s because your maximum price (%s) is invalid. Check your settings."], itemLink or itemString, operation.maxPrice)
end
TSM.Log:AddLogRecord(itemString, "post", "Skip", "invalid", operation)
elseif not prices.normalPrice then
if not TSM.db.global.disableInvalidMsg then
TSM:Printf(L["Did not post %s because your normal price (%s) is invalid. Check your settings."], itemLink or itemString, operation.normalPrice)
end
TSM.Log:AddLogRecord(itemString, "post", "Skip", "invalid", operation)
elseif not prices.undercut then
if not TSM.db.global.disableInvalidMsg then
TSM:Printf(L["Did not post %s because your undercut (%s) is invalid. Check your settings."], itemLink or itemString, operation.undercut)
end
TSM.Log:AddLogRecord(itemString, "post", "Skip", "invalid")
elseif prices.normalPrice < prices.minPrice then
if not TSM.db.global.disableInvalidMsg then
TSM:Printf(L["Did not post %s because your normal price (%s) is lower than your minimum price (%s). Check your settings."], itemLink or itemString, operation.normalPrice, operation.minPrice)
end
TSM.Log:AddLogRecord(itemString, "post", "Skip", "invalid", operation)
elseif prices.maxPrice < prices.minPrice then
if not TSM.db.global.disableInvalidMsg then
TSM:Printf(L["Did not post %s because your maximum price (%s) is lower than your minimum price (%s). Check your settings."], itemLink or itemString, operation.maxPrice, operation.minPrice)
end
TSM.Log:AddLogRecord(itemString, "post", "Skip", "invalid", operation)
elseif salePrice > 0 and prices.minPrice <= salePrice*1.05 then
TSM:Printf(L["WARNING: You minimum price for %s is below its vendorsell price (with AH cut taken into account). Consider raising your minimum price, or vendoring the item."], itemLink or itemString)
return true -- just a warning, doesn't make this invalid
else
return true
end
end
function Post:UpdateBagState()
if time() == bagInfoUpdate then return end
wipe(bagInfo)
wipe(bagState)
for bag, slot, itemString, quantity in TSMAPI:GetBagIterator(true) do
tinsert(bagInfo, {bag, slot, itemString, quantity})
bagState[itemString] = (bagState[itemString] or 0) + quantity
end
bagInfoUpdate = time()
end
function Post:GetScanListAndSetup(GUIRef, options)
-- setup stuff
GUI = GUIRef
isScanning = true
wipe(postQueue)
wipe(currentItem)
wipe(itemLocations)
wipe(TSM.operationLookup)
totalToPost, totalPosted, count = 0, 0, 0
local tempList, scanList = {}, {}
Post:UpdateBagState()
local function HasEnoughToPost(operation, itemString)
local maxStackSize = select(8, TSMAPI:GetSafeItemInfo(itemString)) or 1
local perAuction = min(maxStackSize, operation.stackSize)
local perAuctionIsCap = operation.stackSizeIsCap
local num = (bagState[itemString] or 0) - operation.keepQuantity
return num >= perAuction or (perAuctionIsCap and num > 0)
end
for itemString in pairs(bagState) do
local operations = options.itemOperations[itemString]
if not tempList[itemString] and operations then
for _, operation in ipairs(operations) do
if operation.postCap > 0 and HasEnoughToPost(operation, itemString) then
tempList[itemString] = tempList[itemString] or {}
tinsert(tempList[itemString], operation)
end
end
end
end
for itemString, operations in pairs(tempList) do
TSM.operationLookup[itemString] = operations
local isValid = true
for _, operation in ipairs(operations) do
if not Post:ValidateOperation(itemString, operation) then
isValid = nil
break
end
end
if #options.itemOperations[itemString] ~= #operations then
local j = 1
for i=1, #options.itemOperations[itemString] do
if options.itemOperations[itemString][i] ~= operations[j] then
TSM.Log:AddLogRecord(itemString, "post", "Skip", "notEnough", options.itemOperations[itemString][i])
else
j = j + 1
end
end
end
if isValid then
tinsert(scanList, itemString)
end
end
TSMAPI:FireEvent("AUCTIONING:POST:START", {numItems=#scanList, isGroup=true})
return scanList
end
function Post:ProcessItem(itemString)
local operations = TSM.operationLookup[itemString]
if not operations then return end
local numInBags = Post:GetNumInBags(itemString)
for _, operation in ipairs(operations) do
local toPost, reason, buyout
numInBags = numInBags - operation.keepQuantity
toPost, reason, numInBags = Post:ShouldPost(itemString, operation, numInBags)
numInBags = numInBags + operation.keepQuantity -- restore for the next operation if there are multiple
local data = {}
if toPost then
local bid
bid, buyout, reason = Post:GetPostPrice(itemString, operation)
local postTime = (operation.duration == 48 and 3) or (operation.duration == 24 and 2) or 1
for i = 1, #toPost do
local stackSize, numStacks = unpack(toPost[i])
-- Increase the bid/buyout based on how many items we're posting
local stackBid, stackBuyout = floor(bid * stackSize), floor(buyout * stackSize)
Post:QueueItemToPost(itemString, numStacks, stackSize, stackBid, stackBuyout, postTime, operation)
tinsert(data, { numStacks = numStacks, stackSize = stackSize, buyout = buyout, postTime = postTime })
end
end
TSM.Log:AddLogRecord(itemString, "post", (toPost and L["Post"] or L["Skip"]), reason, operation, buyout)
if #postQueue > 0 and not currentItem.bag then
Post:SetupForAction()
end
if numInBags < 0 then error("less than 0") end
if numInBags == 0 then break end
end
end
function Post:ShouldPost(itemString, operation, numInBags)
local maxStackSize = select(8, TSMAPI:GetSafeItemInfo(itemString))
local perAuction = min(maxStackSize, operation.stackSize)
local maxCanPost = floor(numInBags / perAuction)
local perAuctionIsCap = operation.stackSizeIsCap
if maxCanPost == 0 then
if perAuctionIsCap then
perAuction = numInBags
maxCanPost = 1
else
return nil, "notEnough", numInBags -- not enough for single post
end
end
local activeAuctions = 0
local extraStack
local buyout, bid, _, isWhitelist, isPlayer, isInvalidSeller = TSM.Scan:GetLowestAuction(itemString, operation)
if isInvalidSeller then
TSM:Printf(L["Seller name of lowest auction for item %s was not returned from server. Skipping this item."], select(2, TSMAPI:GetSafeItemInfo(itemString)))
return nil, "invalidSeller", numInBags
end
local prices = TSM.Util:GetItemPrices(operation, itemString)
if buyout and buyout <= prices.minPrice then
-- lowest is below min price
if not prices.resetPrice then
-- lowest is below the min price and there's no reset price
return nil, "belowMinPrice", numInBags
else
-- lowest is below the min price, but there is a reset price
local priceResetBuyout = prices.resetPrice
local priceResetBid = priceResetBuyout * operation.bidPercent
activeAuctions = TSM.Scan:GetPlayerAuctionCount(itemString, priceResetBuyout, priceResetBid, perAuction, operation)
end
elseif isWhitelist and not isPlayer and not TSM.db.global.matchWhitelist then
-- lowest is somebody on the whitelist and we aren't price matching
return nil, "notPostingWhitelist", numInBags
elseif isPlayer or isWhitelist then
-- Either the player or a whitelist person is the lowest teir so use this tiers quantity of items
activeAuctions = TSM.Scan:GetPlayerAuctionCount(itemString, buyout or 0, bid or 0, perAuction, operation)
end
-- If we have a post cap of 20, and 10 active auctions, but we can only have 5 of the item then this will only let us create 5 auctions
-- however, if we have 20 of the item it will let us post another 10
local auctionsCreated = min(operation.postCap - activeAuctions, maxCanPost)
if auctionsCreated <= 0 then
return nil, "tooManyPosted", numInBags
end
if (auctionsCreated + activeAuctions) < operation.postCap then
-- can post at least one more
local extra = numInBags % perAuction
if perAuctionIsCap and extra > 0 then
extraStack = extra
end
end
if Post:FindItemSlot(itemString) then
local posts = { { perAuction, auctionsCreated } }
numInBags = numInBags - perAuction * auctionsCreated
if extraStack then
numInBags = numInBags - extraStack
tinsert(posts, { extraStack, 1 })
end
-- third return value specifies whether there's extra left over in the player's bags after this operation
return posts, nil, numInBags
end
end
function Post:GetPostPrice(itemString, operation)
local lowestBuyout, lowestBid, lowestOwner, isWhitelist, isPlayer = TSM.Scan:GetLowestAuction(itemString, operation)
local bid, buyout, info
local prices = TSM.Util:GetItemPrices(operation, itemString)
if not lowestOwner then
-- No other auctions up, default to normalPrice
info = "postingNormal"
buyout = prices.normalPrice
elseif prices.resetPrice and lowestBuyout <= prices.minPrice then
-- item is below min price and a priceReset is set
if operation.priceReset == "minPrice" then
info = "postingResetMin"
elseif operation.priceReset == "maxPrice" then
info = "postingResetMax"
elseif operation.priceReset == "normalPrice" then
info = "postingResetNormal"
else
-- should never happen, but better to throw an error here than cause issues later on
error("Unknown 'below minimum' price setting.")
end
buyout = prices.resetPrice
elseif isPlayer or (isWhitelist and lowestBuyout - prices.undercut <= prices.maxPrice) then
-- Either we already have one up or someone on the whitelist does
bid, buyout = min(lowestBid, lowestBuyout), lowestBuyout
info = isPlayer and "postingPlayer" or "postingWhitelist"
else
-- we've been undercut and we are going to undercut back
buyout = lowestBuyout - prices.undercut
-- if the cheapest is above our max price, follow the aboveMax setting
if buyout > prices.maxPrice then
if operation.aboveMax == "minPrice" then
info = "aboveMaxMin"
elseif operation.aboveMax == "maxPrice" then
info = "aboveMaxMax"
elseif operation.aboveMax == "normalPrice" then
info = "aboveMaxNormal"
else
-- should never happen, but better to throw an error here than cause issues later on
error("Unknown 'above maximum' price setting.")
end
buyout = prices.aboveMax
end
-- make sure the buyout and bid aren't below the minPrice
buyout = max(buyout, prices.minPrice)
-- Check if the bid is too low
bid = max(buyout * operation.bidPercent, prices.minPrice)
info = info or "postingUndercut"
end
-- set the bid if it hasn't been set
bid = bid or (buyout * operation.bidPercent)
return bid, buyout, info
end
function Post:QueueItemToPost(itemString, numStacks, stackSize, bid, buyout, postTime, operation)
itemLocations[itemString] = itemLocations[itemString] or Post:FindItemSlot(itemString, true)
for i = 1, numStacks do
local oBag, oSlot
for j = 1, #itemLocations[itemString] do
if itemLocations[itemString][j].quantity >= stackSize then
oBag, oSlot = itemLocations[itemString][j].bag, itemLocations[itemString][j].slot
itemLocations[itemString][j].quantity = itemLocations[itemString][j].quantity - stackSize
break
end
end
if not oBag or not oSlot then
oBag, oSlot = Post:FindItemSlot(itemString)
if not (oBag and oSlot) then break end
end
tinsert(postQueue, { bag = oBag, slot = oSlot, bid = bid, buyout = buyout, postTime = postTime, stackSize = stackSize, numStacks = (numStacks - i + 1), itemString = itemString, operation = operation })
totalToPost = totalToPost + 1
end
TSM.Manage:UpdateStatus("manage", totalPosted, totalToPost)
end
function Post:FindItemSlot(findItemString, allLocations)
local locations = {}
Post:UpdateBagState()
for _, data in ipairs(bagInfo) do
local bag, slot, itemString, quantity = unpack(data)
if findItemString == itemString then
if not allLocations then
return bag, slot
end
tinsert(locations, { bag = bag, slot = slot, quantity = quantity })
end
end
return allLocations and locations
end
function Post:GetNumInBags(itemString)
local num = 0
Post:UpdateBagState()
return bagState[itemString] or 0
end
local timeout = CreateFrame("Frame")
timeout:Hide()
timeout:SetScript("OnUpdate", function(self, elapsed)
self.timeLeft = self.timeLeft - elapsed
if self.timeLeft <= 0 or (postQueue[1] and postQueue[1].bag and postQueue[1].slot and not select(3, GetContainerItemInfo(postQueue[1].bag, postQueue[1].slot)) and not AuctionsCreateAuctionButton:IsEnabled()) then
tremove(postQueue, 1)
Post:UpdateItem()
end
end)
function Post:SetupForAction()
Post:RegisterEvent("CHAT_MSG_SYSTEM")
timeout:Hide()
ClearCursor()
TSM.Manage:UpdateStatus("manage", totalPosted, totalToPost)
wipe(currentItem)
currentItem = postQueue[1]
TSM.Manage:SetCurrentItem(currentItem)
GUI.buttons:Enable()
end
-- Check if an auction was posted and move on if so
function Post:CHAT_MSG_SYSTEM(_, msg)
if msg == ERR_AUCTION_STARTED then
count = count + 1
TSM.Manage:UpdateStatus("confirm", count, totalToPost)
end
end
local countFrame = CreateFrame("Frame")
countFrame:Hide()
countFrame.count = -1
countFrame.timeLeft = 10
countFrame:SetScript("OnUpdate", function(self, elapsed)
self.timeLeft = self.timeLeft - elapsed
if count >= totalToPost or self.timeLeft <= 0 then
self:Hide()
Post:Stop()
elseif count ~= self.count then
self.count = count
self.timeLeft = (totalToPost - count) * 2
end
end)
local function DelayFrame()
if #postQueue > 0 then
Post:UpdateItem()
TSMAPI:CancelFrame("postDelayFrame")
elseif not isScanning then
TSM.Manage:UpdateStatus("manage", totalPosted, totalToPost)
Post:Stop()
TSMAPI:CancelFrame("postDelayFrame")
end
end
function Post:UpdateItem()
ClearCursor()
timeout:Hide()
if #postQueue == 0 then
GUI.buttons:Disable()
if isScanning then
TSMAPI:CreateFunctionRepeat("postDelayFrame", DelayFrame)
else
TSM.Manage:UpdateStatus("manage", totalPosted + 1, totalToPost)
countFrame:Show()
end
return
end
totalPosted = totalPosted + 1
TSM.Manage:UpdateStatus("manage", totalPosted, totalToPost)
wipe(currentItem)
currentItem = postQueue[1]
TSM.Manage:SetCurrentItem(currentItem)
GUI.buttons:Enable()
end
function Post:DoAction()
timeout.timeLeft = 0.1
timeout:Show()
if not AuctionFrameAuctions.duration then
-- Fix in case Blizzard_AuctionUI hasn't set this value yet (which could cause an error)
AuctionFrameAuctions.duration = 2
end
if not currentItem.itemString then
timeout:Hide()
Post:SkipItem()
return
end
if type(currentItem.bag) ~= "number" or type(currentItem.slot) ~= "number" then
local bag, slot = Post:FindItemSlot(currentItem.itemString)
if not bag or not slot then
local link = select(2, TSMAPI:GetSafeItemInfo(currentItem.itemString)) or currentItem.itemString
TSM:Printf(L["Auctioning could not find %s in your bags so has skipped posting it. Running the scan again should resolve this issue."], link)
timeout:Hide()
Post:SkipItem()
return
end
currentItem.bag = bag
currentItem.slot = slot
end
local itemString = TSMAPI:GetBaseItemString(GetContainerItemLink(currentItem.bag, currentItem.slot), true)
if itemString ~= currentItem.itemString then
TSM:Print(L["Please don't move items around in your bags while a post scan is running! The item was skipped to avoid an incorrect item being posted."])
timeout:Hide()
Post:SkipItem()
return
end
PickupContainerItem(currentItem.bag, currentItem.slot)
ClickAuctionSellItemButton(AuctionsItemButton, "LeftButton")
StartAuction(currentItem.bid, currentItem.buyout, currentItem.postTime, currentItem.stackSize, 1)
GUI.buttons:Disable()
end
function Post:SkipItem()
local toSkip = {}
local skipped = tremove(postQueue, 1)
count = count + 1
for i, info in ipairs(postQueue) do
if info.itemString == skipped.itemString and info.bid == skipped.bid and info.buyout == skipped.buyout then
tinsert(toSkip, i)
end
end
sort(toSkip, function(a, b) return a > b end)
for _, index in ipairs(toSkip) do
tremove(postQueue, index)
count = count + 1
totalPosted = totalPosted + 1
end
TSM.Manage:UpdateStatus("manage", totalPosted, totalToPost)
TSM.Manage:UpdateStatus("confirm", count, totalToPost)
Post:UpdateItem()
end
function Post:Stop()
GUI:Stopped()
TSMAPI:CancelFrame("postDelayFrame")
Post:UnregisterAllEvents()
TSMAPI:FireEvent("AUCTIONING:POST:STOPPED")
wipe(currentItem)
totalToPost, totalPosted = 0, 0
isScanning = false
end
function Post:GetAHGoldTotal()
local total = 0
local incomingTotal = 0
for i = 1, GetNumAuctionItems("owner") do
local count, _, _, _, _, _, buyoutAmount = select(3, GetAuctionItemInfo("owner", i))
total = total + buyoutAmount
if count == 0 then
incomingTotal = incomingTotal + buyoutAmount
end
end
return TSMAPI:FormatTextMoneyIcon(total), TSMAPI:FormatTextMoneyIcon(incomingTotal)
end
function Post:GetCurrentItem()
return currentItem
end
function Post:EditPostPrice(itemString, buyout, operation)
local bid = buyout * operation.bidPercent
if currentItem.itemString == itemString then
currentItem.buyout = buyout
currentItem.bid = bid
end
for _, data in ipairs(postQueue) do
if data.itemString == itemString then
data.buyout = buyout
data.bid = bid
end
end
TSM.Manage:SetCurrentItem(currentItem)
end
function Post:DoneScanning()
isScanning = false
return totalToPost
end
@@ -0,0 +1,735 @@
-- ------------------------------------------------------------------------------ --
-- TradeSkillMaster_Auctioning --
-- http://www.curse.com/addons/wow/tradeskillmaster_auctioning --
-- --
-- A TradeSkillMaster Addon (http://tradeskillmaster.com) --
-- All Rights Reserved* - Detailed license information included with addon. --
-- ------------------------------------------------------------------------------ --
local TSM = select(2, ...)
local Reset = TSM:NewModule("Reset", "AceEvent-3.0")
local L = LibStub("AceLocale-3.0"):GetLocale("TradeSkillMaster_Auctioning") -- loads the localization table
local resetData, summarySTCache, showCache, itemsReset, justBought = {}, {}, {}, {}, {}
local isScanning, doneScanningText, currentItem, GUI
local summaryST, auctionST, resetButtons
local currentAuction
function Reset:Show(frame)
summaryST = summaryST or Reset:CreateSummaryST(frame.content)
summaryST:Show()
summaryST:SetData({})
auctionST = auctionST or Reset:CreateAuctionST(frame.content)
auctionST:Hide()
auctionST:SetData({})
resetButtons = resetButtons or Reset:CreateResetButtons(frame)
resetButtons:Show()
resetButtons.stop:Enable()
resetButtons.stop.isDone = nil
resetButtons.stop:SetText(L["Stop"])
resetButtons:Disable()
end
function Reset:Hide()
if summaryST then
summaryST:SetData({})
summaryST:Hide()
auctionST:SetData({})
auctionST:Hide()
resetButtons:Hide()
Reset.isSearching = nil
end
end
local function ColSortMethod(st, aRow, bRow, col)
local a, b = st:GetCell(aRow, col), st:GetCell(bRow, col)
local column = st.cols[col]
local direction = column.sort or column.defaultsort or "dsc"
local aValue, bValue = ((a.args or {})[1] or a.value), ((b.args or {})[1] or b.value)
if direction == "asc" then
return aValue < bValue
else
return aValue > bValue
end
end
function Reset:CreateSummaryST(parent)
local stCols = {
{
name = L["Item"],
width = 0.31,
},
{
name = L["Operation"],
width = 0.17,
},
{
name = L["Quantity (Yours)"],
width = 0.13,
align = "CENTER"
},
{
name = L["Total Cost"],
width = 0.12,
align = "RIGHT",
},
{
name = L["Target Price"],
width = 0.12,
align = "RIGHT",
},
{
name = L["Profit Per Item"],
width = 0.12,
align = "RIGHT",
},
}
local handlers = {
OnEnter = function(_, data, self)
if not data.operation then return end
local prices = TSM.Util:GetItemPrices(data.operation, data.itemString, true)
GameTooltip:SetOwner(self, "ANCHOR_NONE")
GameTooltip:SetPoint("BOTTOMLEFT", self, "TOPLEFT")
GameTooltip:AddLine(data.itemLink)
GameTooltip:AddLine(L["Max Cost:"].." "..(TSMAPI:FormatTextMoney(prices.resetMaxCost, "|cffffffff") or "---"))
GameTooltip:AddLine(L["Min Profit:"].." "..(TSMAPI:FormatTextMoney(prices.resetMinProfit, "|cffffffff") or "---"))
GameTooltip:AddLine(L["Max Quantity:"].." "..(TSMAPI:FormatTextMoney(data.operation.resetMaxQuantity, "|cffffffff") or "---"))
GameTooltip:AddLine(L["Max Price Per:"].." "..(TSMAPI:FormatTextMoney(data.operation.resetMaxPricePer, "|cffffffff") or "---"))
if TSM.Reset:IsScanning() then
GameTooltip:AddLine("\n"..L["Must wait for scan to finish before starting to reset."])
else
GameTooltip:AddLine(TSMAPI.Design:GetInlineColor("link2").."\n"..L["Click to show auctions for this item."].."|r")
GameTooltip:AddLine(TSMAPI.Design:GetInlineColor("link2")..L["Shift-Right-Click to show the options for this item's Auctioning group."].."|r")
end
GameTooltip:Show()
end,
OnLeave = function()
GameTooltip:Hide()
end,
OnClick = function(_, data, _, button)
if TSM.Reset:IsScanning() then return end
if button == "LeftButton" then
summaryST:Hide()
auctionST:Show()
resetButtons.summaryButton:Enable()
currentItem = CopyTable(data)
Reset:UpdateAuctionST()
Reset:SelectAuctionRow(auctionST.rowData[1])
currentItem.isReset = true
TSM.Manage:SetInfoText(currentItem)
elseif button == "RightButton" then
if IsShiftKeyDown() then
TSMAPI:ShowOperationOptions("Auctioning", TSM.operationNameLookup[data.operation])
end
end
end,
}
local st = TSMAPI:CreateScrollingTable(parent, stCols, handlers)
st:SetParent(parent)
st:SetAllPoints()
st:EnableSorting(true)
return st
end
function Reset:CreateAuctionST(parent)
local stCols = {
{
name = L["Seller"],
width = 0.4,
},
{
name = L["Stack Size"],
width = 0.2,
align = "CENTER",
},
{
name = L["Auction Buyout"],
width = 0.35,
align = "RIGHT",
},
}
local handlers = {
OnClick = function(_, data)
Reset:SelectAuctionRow(data)
end,
}
local st = TSMAPI:CreateScrollingTable(parent, stCols, handlers)
st:SetParent(parent)
st:SetAllPoints()
st:EnableSorting(false)
return st
end
function Reset:CreateResetButtons(parent)
local height = 24
local frame = CreateFrame("Frame", nil, parent)
frame:SetHeight(height)
frame:SetWidth(210)
frame:SetPoint("BOTTOMRIGHT", -92, 6)
frame.Disable = function(self)
self.buyout:Disable()
self.cancel:Disable()
self.summaryButton:Disable()
end
local function OnCancelClick(self)
if self.auction then
for i=GetNumAuctionItems("owner"), 1, -1 do
if Reset:VerifyAuction(i, "owner", self.auction.record, self.auction.itemString) then
CancelAuction(i)
break
end
end
end
self.auction = nil
self:Disable()
Reset:RegisterMessage("TSM_AH_EVENTS", Reset.RemoveCurrentAuction)
TSMAPI:WaitForAuctionEvents("Cancel")
end
local function OnStopClick(self)
if self.isDone then
Reset:Hide()
TSM.GUI:ShowSelectionFrame()
else
TSM.Manage:OnGUIEvent("stop")
GUI:Stopped(true)
Reset:DoneScanning()
end
end
local function ReturnToSummary()
frame:Disable()
auctionST:Hide()
summaryST:Show()
Reset:UpdateSummaryST()
end
local button = TSMAPI.GUI:CreateButton(frame, 22, "TSMAuctioningResetBuyoutButton")
button:SetPoint("TOPLEFT", -5, 0)
button:SetWidth(80)
button:SetHeight(height)
button:SetText(BUYOUT)
button:SetScript("OnClick", Reset.BuyAuction)
frame.buyout = button
local button = TSMAPI.GUI:CreateButton(frame, 18, "TSMAuctioningResetCancelButton")
button:SetPoint("TOPLEFT", frame.buyout, "TOPRIGHT", 5, 0)
button:SetWidth(70)
button:SetHeight(height)
button:SetText(L["Cancel"])
button:SetScript("OnClick", OnCancelClick)
frame.cancel = button
local button = TSMAPI.GUI:CreateButton(frame, 18, "TSMAuctioningResetStopButton")
button:SetPoint("TOPLEFT", frame.cancel, "TOPRIGHT", 5, 0)
button:SetWidth(60)
button:SetHeight(height)
button:SetText(L["Stop"])
button:SetScript("OnClick", OnStopClick)
button.isDone = nil
frame.stop = button
local summaryButton = TSMAPI.GUI:CreateButton(frame, 16)
summaryButton:SetPoint("TOPRIGHT", parent, "TOPRIGHT", -10, -50)
summaryButton:SetHeight(17)
summaryButton:SetWidth(150)
summaryButton:SetScript("OnClick", ReturnToSummary)
summaryButton:SetText(L["Return to Summary"])
frame.summaryButton = summaryButton
return frame
end
function Reset:GetTotalQuantity(itemString)
local playerTotal, altTotal = TSMAPI:ModuleAPI("ItemTracker", "playertotal", itemString)
if playerTotal and altTotal then
local guildTotal = TSMAPI:ModuleAPI("ItemTracker", "guildtotal", itemString) or 0
local auctionTotal = TSMAPI:ModuleAPI("ItemTracker", "auctionstotal", itemString) or 0
return playerTotal + altTotal + guildTotal + auctionTotal
else
return GetItemCount(itemString, true)
end
end
function Reset:ValidateOperation(itemString, operation)
local itemLink = select(2, TSMAPI:GetSafeItemInfo(itemString)) or itemString
local prices = TSM.Util:GetItemPrices(operation, itemString, true)
-- don't reset this item if their settings are invalid
if not prices.minPrice then
if not TSM.db.global.disableInvalidMsg then
TSM:Printf(L["Did not reset %s because your minimum price (%s) is invalid. Check your settings."], itemLink, operation.minPrice)
end
elseif not prices.maxPrice then
if not TSM.db.global.disableInvalidMsg then
TSM:Printf(L["Did not reset %s because your maximum price (%s) is invalid. Check your settings."], itemLink, operation.maxPrice)
end
elseif not prices.normalPrice then
if not TSM.db.global.disableInvalidMsg then
TSM:Printf(L["Did not reset %s because your normal price (%s) is invalid. Check your settings."], itemLink, operation.normalPrice)
end
elseif not prices.resetMaxCost then
if not TSM.db.global.disableInvalidMsg then
TSM:Printf(L["Did not reset %s because your reset max cost (%s) is invalid. Check your settings."], itemLink, operation.resetMaxCost)
end
elseif not prices.resetMinProfit then
if not TSM.db.global.disableInvalidMsg then
TSM:Printf(L["Did not reset %s because your reset min profit (%s) is invalid. Check your settings."], itemLink, operation.resetMinProfit)
end
elseif not prices.resetResolution then
if not TSM.db.global.disableInvalidMsg then
TSM:Printf(L["Did not reset %s because your reset resolution (%s) is invalid. Check your settings."], itemLink, operation.resetResolution)
end
elseif not prices.resetMaxItemCost then
if not TSM.db.global.disableInvalidMsg then
TSM:Printf(L["Did not reset %s because your reset max item cost (%s) is invalid. Check your settings."], itemLink, operation.resetMaxItemCost)
end
elseif not prices.undercut then
if not TSM.db.global.disableInvalidMsg then
TSM:Printf(L["Did not reset %s because your undercut (%s) is invalid. Check your settings."], itemLink or itemString, operation.undercut)
end
elseif prices.maxPrice < prices.minPrice then
if not TSM.db.global.disableInvalidMsg then
TSM:Printf(L["Did not reset %s because your maximum price (%s) is lower than your minimum price (%s). Check your settings."], itemLink, operation.maxPrice, operation.minPrice)
end
elseif prices.normalPrice < prices.minPrice then
if not TSM.db.global.disableInvalidMsg then
TSM:Printf(L["Did not reset %s because your normal price (%s) is lower than your minimum price (%s). Check your settings."], itemLink, operation.normalPrice, operation.minPrice)
end
elseif Reset:GetTotalQuantity(itemString) >= operation.resetMaxInventory then
-- already have at least max inventory - do nothing here
else
return true
end
end
function Reset:GetScanListAndSetup(GUIRef, options)
local scanList, tempList, groupTemp = {}, {}, {}
GUI = GUIRef
doneScanningText = nil
isScanning = true
wipe(resetData)
wipe(summarySTCache)
wipe(showCache)
wipe(itemsReset)
wipe(TSM.operationLookup)
local temp = {}
for itemString, operations in pairs(options.itemOperations) do
for _, operation in ipairs(operations) do
if operation.resetEnabled and Reset:ValidateOperation(itemString, operation) then
temp[itemString] = temp[itemString] or {}
tinsert(temp[itemString], operation)
end
end
end
for itemString, operations in pairs(temp) do
TSM.operationLookup[itemString] = operations
tinsert(scanList, itemString)
end
return scanList
end
function Reset:ProcessItem(itemString)
local operations = TSM.operationLookup[itemString]
if not operations then return end
for _, operation in ipairs(operations) do
Reset:ProcessItemOperation(itemString, operation)
end
end
function Reset:ProcessItemOperation(itemString, operation)
local scanData = TSM.Scan.auctionData[itemString]
if not scanData then return end
local prices = TSM.Util:GetItemPrices(operation, itemString, true)
local priceLevels = {}
local addNormal, isFirstItem = true, true
local currentPriceLevel = -math.huge
for _, record in ipairs(scanData.compactRecords) do
local itemBuyout = record:GetItemBuyout()
if itemBuyout then
if not isFirstItem and itemBuyout > prices.minPrice and itemBuyout < prices.maxPrice and itemBuyout > (currentPriceLevel + prices.resetResolution) then
if itemBuyout >= prices.normalPrice then
addNormal = false
end
currentPriceLevel = itemBuyout
tinsert(priceLevels, itemBuyout)
end
isFirstItem = false
end
end
if addNormal then
tinsert(priceLevels, prices.normalPrice)
end
for _, targetPrice in ipairs(priceLevels) do
local playerCost, cost, quantity, maxItemCost, playerQuantity = 0, 0, 0, 0, 0
for _, record in ipairs(scanData.compactRecords) do
local itemBuyout = record:GetItemBuyout()
if itemBuyout then
if itemBuyout >= targetPrice then
break
end
if itemBuyout > maxItemCost then
maxItemCost = itemBuyout
end
if not record:IsPlayer() then
cost = cost + (record:GetItemBuyout() * record.totalQuantity)
else
playerQuantity = playerQuantity + record.totalQuantity
playerCost = playerCost + (record:GetItemBuyout() * record.totalQuantity)
end
quantity = quantity + record.totalQuantity
end
end
local profit = (targetPrice * quantity - (cost + playerCost)) / quantity
if profit > 0 then
tinsert(resetData, {prices=prices, itemString=itemString, targetPrice=targetPrice, cost=cost, quantity=quantity, profit=profit, maxItemCost=maxItemCost, playerQuantity=playerQuantity, operation=operation})
end
end
Reset:UpdateSummaryST()
end
function Reset:ShouldShow(data)
local result = {validCost=true, validQuantity=true, validProfit=true, isValid=true}
if data.cost > data.prices.resetMaxCost or data.maxItemCost > data.prices.resetMaxItemCost then
result.validCost = false
end
if data.quantity > data.operation.resetMaxQuantity or data.quantity > (data.operation.resetMaxInventory - Reset:GetTotalQuantity(data.itemString)) then
result.validQuantity = false
end
if data.profit < data.prices.resetMinProfit then
result.validProfit = false
end
return (result.validCost and result.validQuantity and result.validProfit), result
end
function Reset:GetSummarySTRow(data)
local function GetQuantityText(quantity, playerQuantity, isValid)
if isValid then
if playerQuantity > 0 then
return quantity..TSMAPI.Design:GetInlineColor("link2").."("..playerQuantity..")|r"
else
return quantity
end
end
return "|cffff2222"..quantity.."|r"
end
local function GetPriceText(amount, isValid)
local color
if not isValid then
color = "|cffff2222"
end
return TSMAPI:FormatTextMoney(amount, color, true) or "---"
end
local name, itemLink = TSMAPI:GetSafeItemInfo(data.itemString)
local _, shouldShowDetails = Reset:ShouldShow(data)
local row = {
cols = {
{
value = itemLink,
sortArg = name,
},
{
value = data.operation and TSM.operationNameLookup[data.operation] or "---",
sortArg = data.operation and TSM.operationNameLookup[data.operation] or "---",
},
{
value = GetQuantityText(data.quantity, data.playerQuantity, shouldShowDetails.validQuantity),
sortArg = data.quantity,
},
{
value = GetPriceText(data.cost or 0, shouldShowDetails.validCost),
sortArg = data.cost or 0,
},
{
value = GetPriceText(data.targetPrice, true),
sortArg = data.targetPrice,
},
{
value = GetPriceText(data.profit, shouldShowDetails.validProfit),
sortArg = data.profit,
},
},
itemString = data.itemString,
targetPrice = data.targetPrice,
num = data.quantity,
profit = data.profit,
operation = data.operation,
}
return row
end
function Reset:UpdateSummaryST()
local rows = {}
local num = 0
for _, data in ipairs(resetData) do
if not itemsReset[data.itemString] then
if showCache[data] == nil then
showCache[data] = Reset:ShouldShow(data) or false
end
if showCache[data] then
local key = data.itemString .. data.targetPrice
if not summarySTCache[key] then num = num + 1 end
summarySTCache[key] = summarySTCache[key] or Reset:GetSummarySTRow(data)
tinsert(rows, summarySTCache[key])
end
end
end
summaryST:SetData(rows)
if doneScanningText then
TSM.Manage:SetInfoText(doneScanningText)
end
end
function Reset:GetAuctionSTRow(record, index)
local function GetSellerText(name)
if TSMAPI:IsPlayer(name) then
return "|cff99ffff" .. name .. "|r"
elseif TSM.db.factionrealm.whitelist[strlower(name)] then
return name .. " |cffff2222(" .. L["Whitelist"] .. ")|r"
end
return name
end
local row = {
cols = {
{
value = GetSellerText(record.seller),
sortArg = record.seller,
},
{
value = record.count,
sortArg = record.count,
},
{
value = TSMAPI:FormatTextMoney(record.buyout, nil, true) or "---",
sortArg = record.buyout,
},
},
record = record,
itemString = TSMAPI:GetBaseItemString(record.parent:GetItemString(), true),
index = index,
}
return row
end
function Reset:UpdateAuctionST()
local scanData = TSM.Scan.auctionData[currentItem.itemString]
local rows = {}
for i, record in ipairs(scanData.records) do
local itemBuyout = record:GetItemBuyout()
if itemBuyout and itemBuyout >= currentItem.targetPrice then
break
end
tinsert(rows, Reset:GetAuctionSTRow(record, i))
end
auctionST:SetData(rows)
end
function Reset:SelectAuctionRow(data)
local function OnAuctionFound(index)
local row = auctionST.rowData[auctionST:GetSelection()]
resetButtons.summaryButton:Enable()
resetButtons.buyout:Enable()
resetButtons.buyout.auction = {index=index, row=row.itemString, record=row.record}
end
local row = data
resetButtons.buyout:Disable()
resetButtons.cancel:Disable()
justBought = {}
if row.record:IsPlayer() then
resetButtons.summaryButton:Enable()
resetButtons.cancel:Enable()
resetButtons.cancel.auction = {record=row.record, itemString=row.itemString}
else
Reset:FindCurrentAuctionForBuyout(row.itemString, row.record.buyout, row.record.count)
end
end
function Reset:RemoveCurrentAuction()
Reset:UnregisterMessage("TSM_AH_EVENTS")
if not currentItem then return end
local scanData = TSM.Scan.auctionData[currentItem.itemString]
if not scanData then return end
local row = auctionST.rowData[auctionST:GetSelection()]
if not row then return end
scanData:RemoveRecord(row.index)
itemsReset[row.itemString] = true
Reset:UpdateAuctionST()
if #auctionST.rowData == 0 then
TSM.Scan.auctionData[row.itemString] = nil
resetButtons.summaryButton:Enable()
resetButtons.summaryButton:Click()
Reset:UpdateSummaryST()
else
TSMAPI:CreateTimeDelay("resetBuyDelay", 0.2, function() Reset:SelectAuctionRow(auctionST.rowData[1]) end)
end
end
function Reset:VerifyAuction(index, tab, record, itemString)
local iString = TSMAPI:GetBaseItemString(GetAuctionItemLink(tab, index), true)
local _, _, count, _, _, _, minBid, _, buyout, bid = GetAuctionItemInfo(tab, index)
return (iString == itemString and bid == record.bid and minBid == record.minBid and buyout == record.buyout and count == record.count)
end
function Reset:GetStatus()
return 0, 0, 100
end
function Reset:DoAction()
end
function Reset:SkipItem()
end
function Reset:Stop()
isScanning = false
end
function Reset:DoneScanning()
local num, totalProfit = 0, 0
local temp = {}
for _, data in ipairs(resetData) do
if not temp[data.itemString] and Reset:ShouldShow(data) then
temp[data.itemString] = true
num = num + 1
totalProfit = totalProfit + data.profit * data.quantity
end
end
resetButtons.stop:SetText(L["Restart"])
resetButtons.stop.isDone = true
isScanning = false
doneScanningText = format(L["Done Scanning!\n\nCould potentially reset %d items for %s profit."], num, TSMAPI:FormatTextMoneyIcon(totalProfit))
TSM.Manage:SetInfoText(doneScanningText)
end
function Reset:SetupForAction()
end
function Reset:GetCurrentItem()
end
function Reset:IsScanning()
return isScanning
end
local function ValidateAuction(index, listType)
local itemString = TSMAPI:GetBaseItemString(GetAuctionItemLink(listType, index), true)
local _, _, count, _, _, _, _, _, buyout = GetAuctionItemInfo(listType, index)
return count == currentAuction.count and buyout == currentAuction.buyout and itemString == currentAuction.itemString
end
function Reset:BuyAuction()
local altIndex, mainIndex, foundAuction
TSMAPI:CancelFrame("resetFindRepeat")
Reset.isSearching = nil
for i=GetNumAuctionItems("list"), 1, -1 do
if ValidateAuction(i, "list") then
if not justBought[i] then
mainIndex = i
break
else
altIndex = altIndex or i
end
end
end
if mainIndex or altIndex then
PlaceAuctionBid("list", mainIndex or altIndex, currentAuction.buyout)
foundAuction = true
justBought[mainIndex or altIndex] = true
end
resetButtons.buyout:Disable()
if foundAuction then
-- wait for all the events that are triggered by this action
Reset:RegisterMessage("TSM_AH_EVENTS", Reset.RemoveCurrentAuction)
TSMAPI:WaitForAuctionEvents("Buyout")
else
TSM:Print(L["Auction not found. Skipped."])
Reset:RemoveCurrentAuction()
end
end
function Reset:OnAuctionFound(index)
if not Reset.isSearching then return end
resetButtons.buyout:Enable()
end
function Reset:FindCurrentAuctionForBuyout(itemString, buyout, count)
currentAuction = {itemString=itemString, buyout=buyout, count=count}
TSMAPI:CancelFrame("resetFindRepeat")
TSMAPI.AuctionScan:FindAuction(function(...) Reset:OnAuctionFound(...) end, currentAuction)
TSMAPI:CreateTimeDelay("resetFindRepeat", 0.1, function(...)
local isFindScanning = TSMAPI.AuctionScan:IsFindScanning()
if TSMAPI:AHTabIsVisible("Auctioning") then
if not isFindScanning then
TSMAPI.AuctionScan:FindAuction(function(...) Reset:OnAuctionFound(...) end, currentAuction)
else
if isFindScanning ~= currentAuction.itemString then
TSMAPI.AuctionScan:FindAuction(function(...) Reset:OnAuctionFound(...) end, currentAuction)
end
end
end
end, 0.1)
Reset.isSearching = true
end
@@ -0,0 +1,200 @@
-- ------------------------------------------------------------------------------ --
-- TradeSkillMaster_Auctioning --
-- http://www.curse.com/addons/wow/tradeskillmaster_auctioning --
-- --
-- A TradeSkillMaster Addon (http://tradeskillmaster.com) --
-- All Rights Reserved* - Detailed license information included with addon. --
-- ------------------------------------------------------------------------------ --
local TSM = select(2, ...)
local Scan = TSM:NewModule("Scan", "AceEvent-3.0")
local L = LibStub("AceLocale-3.0"):GetLocale("TradeSkillMaster_Auctioning") -- loads the localization table
Scan.auctionData = {}
Scan.skipped = {}
local function CallbackHandler(event, ...)
if event == "QUERY_COMPLETE" then
local filterList = ...
local numItems = 0
for _, v in ipairs(filterList) do
numItems = numItems + #v.items
end
Scan.filterList = filterList
Scan.numFilters = #filterList
Scan:ScanNextFilter()
elseif event == "QUERY_UPDATE" then
local current, total, skipped = ...
TSM.Manage:UpdateStatus("query", current, total)
for _, itemString in ipairs(skipped) do
TSM.Manage:ProcessScannedItem(itemString)
tinsert(Scan.skipped, itemString)
end
elseif event == "SCAN_PAGE_UPDATE" then
TSM.Manage:UpdateStatus("page", ...)
elseif event == "SCAN_INTERRUPTED" then
TSM.Manage:ScanComplete(true)
elseif event == "SCAN_TIMEOUT" then
tremove(Scan.filterList, 1)
Scan:ScanNextFilter()
elseif event == "SCAN_COMPLETE" then
local data = ...
for _, itemString in ipairs(Scan.filterList[1].items) do
-- make sure we haven't already scanned this item (possible with common search terms)
if not Scan.auctionData[itemString] then
Scan:ProcessItem(itemString, data[itemString])
TSM.Manage:ProcessScannedItem(itemString)
end
end
tremove(Scan.filterList, 1)
Scan:ScanNextFilter()
end
end
function Scan:StartItemScan(itemList)
wipe(Scan.auctionData)
wipe(Scan.skipped)
TSMAPI:GenerateQueries(itemList, CallbackHandler)
TSM.Manage:UpdateStatus("query", 0, -1)
end
function Scan:ScanNextFilter()
if #Scan.filterList == 0 then
TSM.Manage:UpdateStatus("scan", Scan.numFilters, Scan.numFilters)
return TSM.Manage:ScanComplete()
end
TSM.Manage:UpdateStatus("scan", Scan.numFilters-#Scan.filterList, Scan.numFilters)
TSMAPI.AuctionScan:RunQuery(Scan.filterList[1], CallbackHandler, true)
end
function Scan:ProcessItem(itemString, auctionItem)
if not itemString or not auctionItem then return end
auctionItem:SetRecordParams({"GetItemBuyout", "GetItemDisplayedBid", "seller", "count"})
auctionItem:PopulateCompactRecords()
auctionItem:SetAlts(TSM.db.factionrealm.player)
if #auctionItem.records > 0 then
auctionItem:SetMarketValue(TSMAPI:GetItemValue(itemString, "DBMarket"))
Scan.auctionData[itemString] = auctionItem
end
end
function Scan:ShouldIgnoreAuction(record, operation)
if type(operation) ~= "table" then return end
if record.timeLeft <= operation.ignoreLowDuration then
-- ignoring low duration
return true
elseif operation.matchStackSize and record.count ~= operation.stackSize then
-- matching stack size
return true
else
local minPrice = TSM.Util:GetItemPrices(operation, record.parent:GetItemString()).minPrice
if operation.priceReset == "ignore" and minPrice and record:GetItemBuyout() and record:GetItemBuyout() <= minPrice then
-- ignoring auctions below threshold
return true
end
end
end
-- This gets how many auctions are posted specifically on this tier, it does not get how many of the items they up at this tier
-- but purely the number of auctions
function Scan:GetPlayerAuctionCount(itemString, findBuyout, findBid, findQuantity, operation)
findBuyout = floor(findBuyout)
findBid = floor(findBid)
local quantity = 0
for _, record in ipairs(Scan.auctionData[itemString].compactRecords) do
if not Scan:ShouldIgnoreAuction(record, operation) and record:IsPlayer() then
if record:GetItemBuyout() == findBuyout and record:GetItemDisplayedBid() == findBid and record.count == findQuantity then
quantity = quantity + record.numAuctions
end
end
end
return quantity
end
-- gets the buyout / bid of the second lowest auction for this item
function Scan:GetSecondLowest(itemString, lowestBuyout, operation)
local auctionItem = Scan.auctionData[itemString]
if not auctionItem then return end
local buyout, bid
for _, record in ipairs(auctionItem.compactRecords) do
if not Scan:ShouldIgnoreAuction(record, operation) then
local recordBuyout = record:GetItemBuyout()
if recordBuyout and (not buyout or recordBuyout < buyout) and recordBuyout > lowestBuyout then
buyout, bid = recordBuyout, record:GetItemDisplayedBid()
end
end
end
return buyout, bid
end
-- Find out the lowest price for this item
function Scan:GetLowestAuction(auctionItem, operation)
if type(auctionItem) == "string" or type(auctionItem) == "number" then -- it's an itemString
auctionItem = Scan.auctionData[auctionItem]
end
if not auctionItem then return end
-- Find lowest
local buyout, bid, owner, invalidSellerEntry
for _, record in ipairs(auctionItem.compactRecords) do
if not Scan:ShouldIgnoreAuction(record, operation) then
local recordBuyout = record:GetItemBuyout()
if recordBuyout then
local recordBid = record:GetItemDisplayedBid()
if not buyout or recordBuyout < buyout or (recordBuyout == buyout and recordBid < bid) then
buyout, bid, owner = recordBuyout, recordBid, record.seller
end
end
end
end
if owner == "?" and next(TSM.db.factionrealm.whitelist) then
invalidSellerEntry = true
end
-- Now that we know the lowest, find out if this price "level" is a friendly person
-- the reason we do it like this, is so if Apple posts an item at 50g, Orange posts one at 50g
-- but you only have Apple on your white list, it'll undercut it because Orange posted it as well
local isWhitelist, isPlayer = true, true
for _, record in ipairs(auctionItem.compactRecords) do
if not Scan:ShouldIgnoreAuction(record, operation) then
local recordBuyout = record:GetItemBuyout()
if not record:IsPlayer() and recordBuyout and recordBuyout == buyout then
isPlayer = nil
if not TSM.db.factionrealm.whitelist[strlower(record.seller)] then
isWhitelist = nil
end
-- If the lowest we found was from the player, but someone else is matching it (and they aren't on our white list)
-- then we swap the owner to that person
buyout, bid, owner = recordBuyout, record:GetItemDisplayedBid(), record.seller
end
end
end
if owner == "?" and next(TSM.db.factionrealm.whitelist) then
invalidSellerEntry = true
end
return buyout, bid, owner, isWhitelist, isPlayer, invalidSellerEntry
end
function Scan:GetPlayerLowestBuyout(auctionItem, operation)
if not auctionItem then return end
-- Find lowest
local buyout
for _, record in ipairs(auctionItem.compactRecords) do
if not Scan:ShouldIgnoreAuction(record, operation) then
local recordBuyout = record:GetItemBuyout()
if record:IsPlayer() and recordBuyout and (not buyout or recordBuyout < buyout) then
buyout = recordBuyout
end
end
end
return buyout
end
@@ -0,0 +1,332 @@
-- ------------------------------------------------------------------------------ --
-- TradeSkillMaster_Auctioning --
-- http://www.curse.com/addons/wow/tradeskillmaster_auctioning --
-- --
-- A TradeSkillMaster Addon (http://tradeskillmaster.com) --
-- All Rights Reserved* - Detailed license information included with addon. --
-- ------------------------------------------------------------------------------ --
local TSM = select(2, ...)
local Util = TSM:NewModule("Util")
local L = LibStub("AceLocale-3.0"):GetLocale("TradeSkillMaster_Auctioning") -- loads the localization table
local currentBank = nil
local bFrame = nil
local buttonFrame = nil
local groupTree = nil
function Util:OnEnable()
TSM:RegisterEvent("GUILDBANKFRAME_OPENED", function(event)
currentBank = "guildbank"
end)
TSM:RegisterEvent("BANKFRAME_OPENED", function(event)
currentBank = "bank"
end)
TSM:RegisterEvent("GUILDBANKFRAME_CLOSED", function(event, addon)
currentBank = nil
end)
TSM:RegisterEvent("BANKFRAME_CLOSED", function(event)
currentBank = nil
end)
end
local function GetItemPrice(operationPrice, itemString)
local func = TSMAPI:ParseCustomPrice(operationPrice)
local price = func and func(itemString)
return price ~= 0 and price or nil
end
function Util:GetItemPrices(operation, itemString, isResetScan)
local prices = {}
prices.cost = GetItemPrice("crafting", itemString)
prices.undercut = GetItemPrice(operation.undercut, itemString)
prices.minPrice = GetItemPrice(operation.minPrice, itemString)
prices.maxPrice = GetItemPrice(operation.maxPrice, itemString)
prices.normalPrice = GetItemPrice(operation.normalPrice, itemString)
prices.cancelRepostThreshold = GetItemPrice(operation.cancelRepostThreshold, itemString)
if isResetScan then
prices.resetMaxCost = GetItemPrice(operation.resetMaxCost, itemString)
prices.resetMinProfit = GetItemPrice(operation.resetMinProfit, itemString)
prices.resetResolution = GetItemPrice(operation.resetResolution, itemString)
prices.resetMaxItemCost = GetItemPrice(operation.resetMaxItemCost, itemString)
end
if TSM.db.global.roundNormalPrice and prices.normalPrice then
prices.normalPrice = ceil(prices.normalPrice / COPPER_PER_GOLD) * COPPER_PER_GOLD
end
prices.resetPrice = operation.priceReset ~= "none" and operation.priceReset ~= "ignore" and prices[operation.priceReset]
prices.aboveMax = operation.aboveMax ~= "none" and prices[operation.aboveMax]
return prices
end
local function createButton(text, parent, func)
local btn = TSMAPI.GUI:CreateButton(bFrame, 15, "Button")
btn:SetText(text)
btn:SetHeight(17)
btn:SetWidth(230)
return btn
end
function Util:createTab(parent)
bFrame = CreateFrame("Frame", nil, parent)
--TSMAPI.Design:SetFrameColor(bFrame)
bFrame:Hide()
--size--
bFrame:SetAllPoints()
--GroupTree--
local tFrame = CreateFrame("Frame", nil, bFrame)
tFrame:SetPoint("TOPLEFT", 0, -5)
tFrame:SetPoint("TOPRIGHT", 0, -5)
tFrame:SetPoint("BOTTOMLEFT", 0, 120)
tFrame:SetPoint("BOTTOMRIGHT", 0, 120)
groupTree = TSMAPI:CreateGroupTree(tFrame, "Auctioning", "Auctioning_Bank")
groupTree:SetPoint("TOPLEFT", 5, -5)
groupTree:SetPoint("BOTTOMRIGHT", -5, 5)
--Buttons--
buttonFrame = CreateFrame("Frame", nil, bFrame)
buttonFrame:SetPoint("TOPLEFT", 0, -330)
buttonFrame:SetPoint("TOPRIGHT", 0, -330)
buttonFrame:SetPoint("BOTTOMLEFT")
buttonFrame:SetPoint("BOTTOMRIGHT")
buttonFrame.btnToBank = createButton(L["Move Group To Bank"], buttonFrame, nil)
buttonFrame.btnToBank:SetPoint("BOTTOM", buttonFrame, "BOTTOM", 0, 95)
buttonFrame.btnNonGroup = createButton(L["Move Non Group Items to Bank"], buttonFrame, nil)
buttonFrame.btnNonGroup:SetPoint("BOTTOM", buttonFrame, "BOTTOM", 0, 75)
buttonFrame.btnToBags = createButton(L["Move Post Cap To Bags"], buttonFrame, nil)
buttonFrame.btnToBags:SetPoint("BOTTOM", buttonFrame, "BOTTOM", 0, 45)
buttonFrame.btnAHToBags = createButton(L["Move AH Shortfall To Bags"], buttonFrame, nil)
buttonFrame.btnAHToBags:SetPoint("BOTTOM", buttonFrame, "BOTTOM", 0, 25)
buttonFrame.btnAllToBags = createButton(L["Move Group To Bags"], buttonFrame, nil)
buttonFrame.btnAllToBags:SetPoint("BOTTOM", buttonFrame, "BOTTOM", 0, 5)
Util:updateButtons()
return bFrame
end
function Util:updateButtons()
------------------
-- Move to Bank --
------------------
buttonFrame.btnToBank:SetScript("OnClick", function(self)
Util:groupTree(groupTree:GetSelectedGroupInfo(), "bags")
end)
-----------------------------------
-- Move Non Group Items to Bank --
-----------------------------------
buttonFrame.btnNonGroup:SetScript("OnClick", function(self)
Util:nonGroupTree(groupTree:GetSelectedGroupInfo(), "bags")
end)
----------------------------
-- Move Post Cap to Bags --
----------------------------
buttonFrame.btnToBags:SetScript("OnClick", function(self)
Util:groupTree(groupTree:GetSelectedGroupInfo(), currentBank)
end)
--------------------------------
-- Move AH Shortfall to Bags --
--------------------------------
buttonFrame.btnAHToBags:SetScript("OnClick", function(self)
Util:groupTree(groupTree:GetSelectedGroupInfo(), currentBank, false, true)
end)
----------------------------
-- Move All to Bags --
----------------------------
buttonFrame.btnAllToBags:SetScript("OnClick", function(self)
Util:groupTree(groupTree:GetSelectedGroupInfo(), currentBank, true)
end)
end
function Util:groupTree(grpInfo, src, all, ah)
local next = next
local newgrp = {}
local totalItems = Util:getTotalItems(src)
local bagItems = Util:getTotalItems("bags") or {}
for groupName, data in pairs(grpInfo) do
groupName = TSMAPI:FormatGroupPath(groupName, true)
for _, opName in ipairs(data.operations) do
TSMAPI:UpdateOperation("Auctioning", opName)
local opSettings = TSM.operations[opName]
if not opSettings then
-- operation doesn't exist anymore in Auctioning
TSM:Printf(L["'%s' has an Auctioning operation of '%s' which no longer exists."], groupName, opName)
else
--it's a valid operation
for itemString in pairs(data.items) do
local totalq = 0
local usedq = 0
local maxPost = opSettings.stackSize * opSettings.postCap
if totalItems then
totalq = totalItems[itemString] or 0
end
if src == "bags" then -- move them all back to bank/gbank
if totalq > 0 then
newgrp[itemString] = totalq * -1
totalItems[itemString] = nil -- remove the current bag count in case we loop round for another operation
end
else -- move from bank/gbank to bags
if totalq > 0 then
if all then
newgrp[itemString] = totalq
totalq = 0
else
local quantity = maxPost - (bagItems[itemString] or 0)
newgrp[itemString] = (newgrp[itemString] or 0) + quantity
totalq = totalq - quantity -- remove this operations qty to move from source quantity in case we loop again for another operation
if bagItems[itemString] then --remove this operations maxPost quantity from the bag total in case we loop again for another operation
bagItems[itemString] = bagItems[itemString] - maxPost
if bagItems[itemString] <= 0 then
bagItems[itemString] = nil
end
end
end
end
end
end
end
end
end
if src ~= "bags" and ah then -- remove ah/mail quantities from the total to move
local playermail = TSMAPI:ModuleAPI("ItemTracker", "playermail")
local playerauctions = TSMAPI:ModuleAPI("ItemTracker", "playerauctions")
for itemString in pairs(newgrp) do
if playerauctions then
newgrp[itemString] = newgrp[itemString] - (playerauctions[itemString] or 0)
end
if playermail then
newgrp[itemString] = newgrp[itemString] - (playermail[itemString] or 0)
end
if newgrp[itemString] < 0 then
newgrp[itemString] = nil
end
end
end
if next(newgrp) == nil then
TSM:Print(L["Nothing to Move"])
else
TSM:Print(L["Preparing to Move"])
TSMAPI:MoveItems(newgrp, TSM.PrintMsg)
end
end
function Util:nonGroupTree(grpInfo, src)
local next = next
local newgrp = {}
local bagItems = Util:getTotalItems("bags")
for groupName, data in pairs(grpInfo) do
groupName = TSMAPI:FormatGroupPath(groupName, true)
for _, opName in ipairs(data.operations) do
TSMAPI:UpdateOperation("Auctioning", opName)
local opSettings = TSM.operations[opName]
if not opSettings then
-- operation doesn't exist anymore in Auctioning
TSM:Printf(L["'%s' has an Auctioning operation of '%s' which no longer exists."], groupName, opName)
else
-- it's a valid operation so remove all the items from bagItems so we are left with non group items to move
for itemString in pairs(data.items) do
if bagItems then
if bagItems[itemString] then
bagItems[itemString] = nil
end
end
end
end
end
end
for itemString, quantity in pairs(bagItems) do
quantity = quantity * -1
if newgrp[itemString] then
newgrp[itemString] = newgrp[itemString] + quantity
else
newgrp[itemString] = quantity
end
end
if next(newgrp) == nil then
TSM:Print(L["Nothing to Move"])
else
TSM:Print(L["Preparing to Move"])
TSMAPI:MoveItems(newgrp, TSM.PrintMsg)
end
end
function TSM.PrintMsg(message)
TSM:Print(message)
end
function Util:getTotalItems(src)
local results = {}
if src == "bank" then
local function ScanBankBag(bag)
for slot = 1, GetContainerNumSlots(bag) do
if not TSMAPI:IsSoulbound(bag, slot) then
local itemString = TSMAPI:GetBaseItemString(GetContainerItemLink(bag, slot), true)
if itemString then
local quantity = select(2, GetContainerItemInfo(bag, slot))
if not results[itemString] then results[itemString] = 0 end
results[itemString] = results[itemString] + quantity
end
end
end
end
for bag = NUM_BAG_SLOTS + 1, NUM_BAG_SLOTS + NUM_BANKBAGSLOTS do
ScanBankBag(bag)
end
ScanBankBag(-1)
return results
elseif src == "guildbank" then
for bag = 1, GetNumGuildBankTabs() do
for slot = 1, MAX_GUILDBANK_SLOTS_PER_TAB or 98 do
local link = GetGuildBankItemLink(bag, slot)
local itemString = TSMAPI:GetBaseItemString(link, true)
if itemString then
local quantity = select(2, GetGuildBankItemInfo(bag, slot))
if not results[itemString] then results[itemString] = 0 end
results[itemString] = results[itemString] + quantity
end
end
end
return results
elseif src == "bags" then
for bag, slot, itemString, quantity, locked in TSMAPI:GetBagIterator(true) do
if currentBank == "guildbank" then
if not TSMAPI:IsSoulbound(bag, slot) then
results[itemString] = (results[itemString] or 0) + quantity
end
else
results[itemString] = (results[itemString] or 0) + quantity
end
end
end
return results
end
@@ -0,0 +1,179 @@
-- ------------------------------------------------------------------------------ --
-- TradeSkillMaster_Auctioning --
-- http://www.curse.com/addons/wow/tradeskillmaster_auctioning --
-- --
-- A TradeSkillMaster Addon (http://tradeskillmaster.com) --
-- All Rights Reserved* - Detailed license information included with addon. --
-- ------------------------------------------------------------------------------ --
-- This file is to contain things that are common between different scan types.
local TSM = select(2, ...)
local Manage = TSM:NewModule("Manage", "AceEvent-3.0")
local L = LibStub("AceLocale-3.0"):GetLocale("TradeSkillMaster_Auctioning") -- loads the localization table
local scanStatus = {}
local GUI, Util, mode
function Manage:StartScan(GUIRef, options)
GUI = GUIRef
mode = GUI.mode
Util = TSM[mode]
GUI.OnAction = Manage.OnGUIEvent
wipe(scanStatus)
TSM.Log:Clear()
local scanList = Util:GetScanListAndSetup(GUI, options)
GUI:UpdateSTData()
if #scanList == 0 then
GUI:Stopped()
return
end
if options and options.noScan then -- no scanning required
Manage:StartNoScanScan(GUIRef, scanList)
return
end
GUI.statusBar:SetStatusText(L["Starting Scan..."])
GUI.statusBar:UpdateStatus(0, 0)
GUI.infoText:SetInfo(L["Running Scan..."])
TSM.Scan:StartItemScan(scanList)
end
function Manage:StartNoScanScan(GUIRef, scanList)
GUI.infoText:SetInfo(L["Processing Items..."])
GUI.statusBar:UpdateStatus(0, 0)
TSMAPI:CancelFrame("auctioningNoScanProcessing")
scanStatus.query = {1, 1}
local totalToScan = #scanList
local function ProcessNoScanItems()
local numLeft = #scanList
for i=1, min(numLeft, 10) do
Manage:ProcessScannedItem(tremove(scanList, 1), (i ~= min(numLeft, 10) and i ~= 1))
Manage:UpdateStatus("scan", totalToScan-#scanList, totalToScan)
end
if #scanList == 0 then
TSMAPI:CancelFrame("auctioningNoScanProcessing")
Manage:ScanComplete()
end
end
TSMAPI:CreateTimeDelay("auctioningNoScanProcessing", 0, ProcessNoScanItems, 0.1)
end
function Manage:OnGUIEvent(event)
if event == "action" then
Util:DoAction()
elseif event == "skip" then
Util:SkipItem()
elseif event == "stop" then
TSMAPI:CancelFrame("auctioningNoScanProcessing")
TSMAPI.AuctionScan:StopScan()
Util:Stop()
end
TSMAPI:CreateTimeDelay("aucManageSTUpdate", 0.01, GUI.UpdateAuctionsSTData)
end
function Manage:ProcessScannedItem(itemString, noUpdate)
Util:ProcessItem(itemString)
if not noUpdate then
GUI:UpdateSTData()
end
end
function Manage:ScanComplete(interrupted)
if interrupted then
Util:Stop(true)
else
local numToManage = Util:DoneScanning()
TSMAPI:FireEvent("AUCTIONING:SCANDONE", {num=numToManage})
if numToManage == 0 then
Util:Stop()
elseif TSM.db.global.scanCompleteSound ~= 1 then
PlaySound(TSM.Options:GetScanCompleteSound(TSM.db.global.scanCompleteSound), "Master")
end
end
end
-- these functions help display the status text which goes inside the statusbar
local function IsStepStarted(step)
return scanStatus[step] and scanStatus[step][1] and scanStatus[step][2]
end
local function IsStepDone(step)
return IsStepStarted(step) and scanStatus[step][1] == scanStatus[step][2]
end
-- update the statusbar
function Manage:UpdateStatus(statusType, current, total)
scanStatus[statusType] = {current, total}
if statusType == "query" then
if total >= 0 then
GUI.statusBar:SetStatusText(format(L["Preparing Filter %d / %d"], current, total))
else
GUI.statusBar:SetStatusText(format(L["Preparing Filters..."], current, total))
end
elseif IsStepDone("scan") and IsStepDone("manage") and IsStepDone("confirm") then -- scan complete
GUI.statusBar:SetStatusText(L["Scan Complete!"])
else
local parts = {}
if IsStepDone("scan") then
tinsert(parts, L["Done Scanning"])
elseif IsStepStarted("scan") then
if IsStepStarted("page") then
tinsert(parts, format(L["Scanning %d / %d (Page %d / %d)"], scanStatus.scan[1], scanStatus.scan[2], scanStatus.page[1], scanStatus.page[2]))
else
tinsert(parts, format(L["Scanning %d / %d"], scanStatus.scan[1], scanStatus.scan[2]))
end
end
if IsStepDone("manage") then
if mode == "Post" then
tinsert(parts, L["Done Posting"])
elseif mode == "Cancel" then
tinsert(parts, L["Done Canceling"])
end
if IsStepStarted("confirm") then
tinsert(parts, format(L["Confirming %d / %d"], scanStatus.confirm[1]+1, scanStatus.confirm[2]))
else
tinsert(parts, format(L["Confirming %d / %d"], 1, scanStatus.manage[2]))
end
elseif IsStepDone("scan") and IsStepStarted("manage") then
if mode == "Post" then
tinsert(parts, format(L["Posting %d / %d"], scanStatus.manage[1]+1, scanStatus.manage[2]))
elseif mode == "Cancel" then
tinsert(parts, format(L["Canceling %d / %d"], scanStatus.manage[1]+1, scanStatus.manage[2]))
end
if IsStepStarted("confirm") then
tinsert(parts, format(L["Confirming %d / %d"], scanStatus.confirm[1]+1, scanStatus.confirm[2]))
else
tinsert(parts, format(L["Confirming %d / %d"], 1, scanStatus.manage[2]))
end
end
GUI.statusBar:SetStatusText(table.concat(parts, " - "))
end
if IsStepDone("query") then
local scanCurrent = scanStatus.scan and scanStatus.scan[1] or 0
local scanTotal = scanStatus.scan and scanStatus.scan[2] or 1
local confirmCurrent = scanStatus.confirm and scanStatus.confirm[1] or 0
local confirmTotal = scanStatus.confirm and scanStatus.confirm[2] or 1
GUI.statusBar:UpdateStatus(100*confirmCurrent/confirmTotal, 100*scanCurrent/scanTotal)
end
end
function Manage:SetCurrentItem(currentItem)
if currentItem and currentItem.itemString then
GUI.infoText:SetInfo(currentItem)
end
end
function Manage:GetCurrentItem()
return GUI.infoText:GetInfo()
end
function Manage:SetInfoText(text)
if type(text) ~= "table" then
GUI:UpdateLogSTHighlight()
end
GUI.infoText:SetInfo(text)
end