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
+305
View File
@@ -0,0 +1,305 @@
v2.5.2
*Cleaned up some code
*The rows in the materials list in the queue will now respond to clicks like normal item links.
*The quantity box in the profession frame will now highlight all of the text when you click into it.
*Changed how subclasses are programmatically expanded to fix various issues with crafting costs disappearing when they are collapsed.
v2.5.1
*Added new "/tsm restock_help" slash command which will tell you why an item is not being queued.
v2.5
*Added mats require to craft an item to Crafting's tooltip.
*Removed some old, unnecessary ItemTracker checks.
*Added module API for getting Crafting frame status.
*Fixed the frame strata of the queue frame to match the main profession frame.
*Added events to the restock queue.
*Added code to clean up crafts which are no longer known.
*Added some extra checks to profession window code to prevent lua errors.
v2.4.6
*Changed tooltip description for min profit.
v2.4.5
*Fixed quantity display issue with gathering mail items.
*Added module APIs for addQueue,removeQueue,getQueue,getCDCrafts
v2.4.4
*Fixed bug with invalid craft value method warning.
v2.4.3
*Rearranged the materials section in the profession frame.
*Added TradeSkillMaster_ItemTracker as a dependency.
v2.4.2
*Fixed race condition between the queue and profession scanning code.
v2.4.1
*Updating group tree creation API call.
v2.4
*Button for switching between Crafting and default profession UI's is now more obvious.
*Improved how the current craft reagent list is populated.
*Fixed error from special characters being used in the crafts/mats tab filters.
*Using new movable frame TSMAPI function for gather and profession frames.
*Removed '/tsm gatherreset' and '/tsm profreset' as they are now combined with '/tsm freset'.
*Added mail tasks for destroyable items bought from the AH.
*Added an option to enable even stacks when searching for millable / prospectable items with gathering.
v2.3.1
*Added /tsm gatherreset to reset gathering frame position
v2.3
*Added caching to the retrieval of mat item links to greatly speed up opening of professions.
*Fixed gathering shopping search if no auctions found for item (prints to chat).
*Fixed an error with manually clicking gathering item for shopping search and no auctions found.
*Fixed incorrect mailing task quantiies.
*Added checkbox to gathering window to disable destroying search at AH
v2.2.3
*Fixed bug with localization.
v2.2.2
*Fixed a bug with syncing professions as a result of the 5.4 changes to tradeskill links.
v2.2.1
*Fixed bug with enchants incorrectly showing more than 1 being made per craft due to Blizzard bug.
v2.2
*Gathering will now provide additional options for vendor-bought items besides the vendor.
*Changed how gathering sources show quantity.
*Vendor tasks will now exclude what the crafter already has in their inventory.
*Fixed various bugs related to gathering.
*Fixed bug with tracking soulbound items
*Added soulbound mats to gathering tasks on crafter only.
*Fixed bug with enchant vellum button.
*Gathering from the AH will now automatically switch to the next item when the current one is finished.
*Added destroying tasks to gathering.
*The position of the gathering frame is now saved.
*Updated TOC for patch 5.4.
v2.1.2
*Moved operation management to new tab.
v2.1.1
*Fixed error with leveling untracked professions.
*Reverted change to how professions are scanned.
*Fixed bug with gathering from the AH.
v2.1
*Operations will now be properly sorted alphabetically.
*Changed "Materials" icon in /tsm window to "Crafting" and added new "Crafts" tab within.
*Added visual indicator for crafts which make more than one item.
*Added Pandaren cooking skill info.
*Sped up the inventory lookup code which will result in significantly less laggy Crafting interfaces.
*Updated scrolling tables.
*Added option for setting the scale of the Crafting window.
*Made the Crafting window resizable.
*The Crafting window will now remember its status including position, size, and queue opened/closed.
*Redid the layout of the gathering frame.
*Made the selection frame for gathering smarter and more automatic.
*Fixed some 5.4 PTR errors with dividing by zero.
*Crafting will no longer allow using "crafting" as part of a craft value price source (mat prices unaffected).
*Added "TSM" button to the top of the profession window for toggling between Crafting and default profession windows.
*Added "All" row to the top of the list of crafts for the current profession.
*Added icons next to material links in the profession frame.
*Daily cooldowns will now be displayed as hours/min remaining.
*Crafting will now ignore guild professions.
*Gathering will now count down when buying from the AH in destroy mode.
*Many other minor bug fixes and improvements.
v2.0.4
*Fixed bug with spirit of harmonies in bags not being counted.
v2.0.3
*Bug fix with clearing all custom mat prices.
v2.0.2
*Gather will display a warning when the user tries to use it without TSM_ItemTracker active.
v2.0.1
*Removed max price for AH searches through gathering.
v2.0
*First 2.0 Version!
\\
v1.2
*Updated for patch 5.2.
*Crafting can now use mail tracking data from ItemTracker.
*Fixed a bug with TSM not showing MoP professions.
*Added new MoP enchants.
*Updated vendor trades and vendor items for MoP.
*Fixed double-click queuing to be more intuitive.
*Fixed a bug with estimated total cost / profit with crafts which make more than 1 item.
*Many other minor bug fixes and improvements.
v1.1
*Added options for a secondary price source and for using the lower of two price sources.
*Added more vendor items.
*Crafting will now take into account how many each cast of a craft will make when queueing.
*Fixed a bug with crafts not showing in the Crafting window.
*The groups of crafts will now be updated when a rescan is performed.
*Crafting will now take advantage of some of the new TSM APIs in v1.1 of TSM.
*Fixed a bug with professions not being scanned correctly on non-english clients.
*Many other minor bug fixes and improvements.
v1.0
*First Release Version!
**Beta Versions:**
v0.3.5
*Fixed a bug with closing and re-opening the craft management window causing weird behavior.
*Disabled crafts will no longer be queued as intermediate crafts.
*Fixed a bug where intermediate crafts were being queued even if they were unprofitable.
*Added a minimum ilvl option at the profession level for the restock queue.
*Many other minor bug fixes and improvements.
v0.3.4
*Fixed a minor bug with the materials page.
*Fixed a bug with the "characters to include" dropdown wasn't saving / updating correctly.
*Added the ability to use cross faction inventory data from datastore.
*Added options for having the on-hand queue ignore items you can buy from a vendor.
*Many other minor fixes and improvements.
v0.3.3
*Updated TOC for patch 4.2.
v0.3.2
*Crafts with a CD should no longer be automatically added to the queue as intermediate crafts.
*Added a bunch of support code for some upcoming changes to the Shopping for crafting mats feature.
v0.3.1
*Reorganized the options to hopefully be more intuitive.
*Removed a few out-dated options.
*Completely re-did the craft queue to make intermediate crafts more obvious and make the whole intermediate craft process more transparent.
*Fixed the bug where the Craft Next button was being disabled incorrectly.
*Changed the colors of the craft queue to all be slightly lighter (ie the red is now more of an orange).
*Many other minor bug fixes and improvements.
v0.3
*Completely redesigned the "Materials" page using a scrolling table.
*Added a new "Material Cost Options" window which is accessible by clicking on one of the rows in the "Materials" page.
*The material cost source will now show up in the Craft Management Window.
*Changed the misleading "Market Value" label in the queuing part (top left) of the Craft Management Window to "Crafted Item Value".
*Added some code to cleanup the saved variables file a bit.
*Fixed a bug with chaos orbs and other BOP mats not being tracked correctly.
*Many other minor bug fixes and improvements.
v0.2.12
*Fixed a bug with the "Characters to Include" dropdown not saving / displaying correctly.
*Fixed a bug with the "Additional Item Settings" button wrapping to a second line.
*Many other minor bug fixes and improvements.
v0.2.11
*Fixed an error that pops up when the user is not using DataStore or Gathering.
*Items that are both crafts and mats should now have their crafting costs correctly exported to Auctioning.
*Many other minor bug fixes and improvements.
v0.2.10
*Eternals can now be split / created just like essences and splitting / combining works for all professions not just Enchanting.
*Changed code to get auction count info from Gathering instead of AuctionDB when Gathering is selected.
v0.2.9
*Added support for getting price data from The Undermine Journal.
*Fixed a bunch of bugs related to crafts not being added or showing up under the wrong profession.
*Updated the TOC for patch 4.1.
v0.2.8
*Fixed some bugs with Inscription crafts not showing / being grouped incorrectly.
*Fixed a bug where profession scans where timing out.
*Added some new groups to Inscription and regrouped a few items.
*Added a "Clear Tradeskill Filters" button to the craft management window (below the cost / profit estimates) that will be shown when a filter is set or a category is collapsed in the profession window and thus items are being hidden from the craft queue.
*Many other minor bug fixes and improvements.
v0.2.7
*Added a percent next to the profit in the craft management window that shows % profit.
*Added an options to turn off the new % column in the options.
*The title of each of the queuing columns (top left part) in the craft management window can be clicked to sort by that column.
*Fixed a bug with creating a new profile causing issues.
*Added an option to display crafting info in item tooltips.
*Fixed a bug with inscription crafts not showing up correctly when sorted by ink for some users.
v0.2.6
*Added profession icons to the left side of the Craft Management Window for quick and easy switching between professions.
*Fixed a bug with the "double click queue" setting not saving / changing correctly.
*Every single tradeskill that produces an item (ie not Inscription Research / profess-specific enchants) will be added to Crafting. Anything that wasn't previously in Crafting will show up in the "Other" group.
*Added an option for enabling / disabling new crafts by default.
*Many other minor bug fixes and improvements.
v0.2.5
*Cleaned up the settings GUI code.
*Added a few missing crafts (mostly engineering).
*Crafts with cooldowns will no longer be automatically queued with the restock / on-hand queue or queued as intermediate crafts.
v0.2.4
*Added APIs for controling the craft queue (documented at the bottom of the TradeSkillMaster_Crafting.lua file).
*Fixed a bug with seen count filters not working.
*Fixed a bug with opening smelting causing an error.
*Fixed a bug with non-enabled crafts being queued as intermediate crafts.
*On-Hand queue should no longer queue things with a negative profit.
*Added folded obsidium and grinding stones crafts to blacksmithing.
*Added inks as crafts for inscription.
*Crafts where at least one (but not all) of the queued quantity can be made will now show up in blue in the craft queue and be craftable by the "Craft Next" button.
*Many other minor bug fixes and improvements.
v0.2.3
*Added 4.0.6 enchants.
*Added an option for using Auctioning fallback as market value when none of an item are on the AH.
*You can now use Auctionator as a source of mat / crafted item prices.
*Added options to control sorting of crafts in main TSM window.
*Added total cost / profit text to the Craft Management Window.
*Many other minor bug fixes and improvements.
v0.2.2
*Updated with new recipes from 4.0.6.
*Fixed an issue with leather not showing under leatherworking.
*Fixed a bunch of issues with the Craft Next button disabling / enabling incorrectly.
*Cleaned up a lot of the code which should result in a drastic decrease in processing when loading / using the Craft Management Window.
*Many other minor bug fixes and improvements.
v0.2.1
*Using datastore for alt data can now get data from multiple accounts.
*Fixed a bug with the "Open Profession" button not working on non-english realms.
*Alchemy should no longer freeze the game client when skyflare diamond is enabled.
*Few other minor bug fixes and improvements.
v0.2
*Profession scanning should no longer cause the game to lag.
*Equipped items and bags are no longer included in the number in player's bags.
*When removing an override from a mat cost, the cost will be recalcuated correctly.
*Fixed a bug with intermediate crafts not queuing up correctly.
*Added a button for forcing a profession scan.
*Added frame to overlay profession window during scanning.
*Crafts which create more than 1 of the craft item per craft will now have their profits calculated correctly.
*Added option for only creating Auctioning groups for enabled crafts.
*Many other minor bug fixes and changes.
v0.1.4
*Fixed a bug with the restock queue when set to a % min profit.
*Fixed the localizations file to work properly on non-english clients.
*Added a way to quickly and easily add crafted items to Auctioning groups. This can be found next to the "Enable/Disable All" buttons in the main TSM window.
v0.1.3
*Profile tab should now work properly.
*Incrased max value for "Minimum Profit (in gold)" slider.
*Optimized and throttled profession scans more.
*Added additional crafts.
*Optimized queuing part of craft management window.
*Added "All" category to queuing part of craft management window.
*Put in some per-profession options / overrides.
*Many other minor improvements and bug fixes.
v0.1.2
*Crafting now properly prices vendor bought items and should no longer export them to Shopping.
*Crafting should no work on non-english clients.
*Including items on the AH is now enabled by default.
*Many minor bug fixes.
v0.1.1
*The first time crafts are added, they will be set to be enabled to help first time users.
v0.1
*First Commit Version
+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
+155
View File
@@ -0,0 +1,155 @@
-- ------------------------------------------------------------------------------------- --
-- TradeSkillMaster_Crafting - AddOn by Sapu94 --
-- http://wow.curse.com/downloads/wow-addons/details/tradeskillmaster_crafting.aspx --
-- --
-- This addon is licensed under the CC BY-NC-ND 3.0 license as described at the --
-- following url: http://creativecommons.org/licenses/by-nc-nd/3.0/ --
-- Please contact the author via email at sapu94@gmail.com with any questions or --
-- concerns regarding this license. --
-- ------------------------------------------------------------------------------------- --
-- TradeSkillMaster_Crafting Locale - deDE
-- Please use the localization app on CurseForge to update this
-- http://wow.curseforge.com/addons/TradeSkillMaster_Crafting/localization/
local L = LibStub("AceLocale-3.0"):NewLocale("TradeSkillMaster_Crafting", "deDE")
if not L then return end
L["All"] = "Alle"
L["Are you sure you want to reset all material prices to the default value?"] = "Wirklich alle Materialpreise auf den Standardwert zurücksetzen?"
L["Ask Later"] = "Später nachfragen" -- Needs review
L["Auction House"] = "Auktionshaus"
L["Available Sources"] = "Verfügbare Quellen" -- Needs review
L["Buy Vendor Items"] = "Gegenstände vom Händler kaufen" -- Needs review
L["Characters (Bags/Bank/AH/Mail) to Ignore:"] = "Charaktere (Taschen/Bank/AH/Post), die ignoriert werden:" -- Needs review
L["Clear Filters"] = "Filter zurücksetzen" -- Needs review
L["Clear Queue"] = "Warteschlange leeren"
-- L["Click Start Gathering"] = ""
L["Collect Mail"] = "Post einsammeln" -- Needs review
L["Cost"] = "Kosten"
-- L["Could not get link for profession."] = ""
L["Crafting Cost"] = "Herstellungskosten" -- Needs review
-- L["Crafting Material Cost"] = ""
L["Crafting operations contain settings for restocking the items in a group. Type the name of the new operation into the box below and hit 'enter' to create a new Crafting operation."] = "Herstellungsprozesse enthalten Einstellungen, um die Gegenstände einer Gruppe aufzufüllen. Gib den Namen des neuen Prozesses in die Box unten ein und drücke 'Enter', um einen neuen Herstellungsprozess zu erzeugen." -- Needs review
-- L["Crafting will not queue any items affected by this operation with a profit below this value. As an example, a min profit of 'max(10g, 10% crafting)' would ensure atleast a 10g and 10% profit."] = ""
L["Craft Next"] = "Nächstes herstellen"
-- L["Craft Price Method"] = ""
-- L["Craft Queue"] = ""
L["Create Profession Groups"] = "Berufsgruppen erstellen" -- Needs review
L["Custom Price"] = "Benutzerdefinierter Preis" -- Needs review
L["Custom Price for this item."] = "Benutzerdefinierter Preis für diesen Gegenstand." -- Needs review
L["Custom Price per Item"] = "Benutzerdefinierter Preis pro Gegenstand" -- Needs review
-- L["Default Craft Price Method"] = ""
-- L["Default Material Cost Method"] = ""
L["Default Price"] = "Standardpreis" -- Needs review
-- L["Default Price Settings"] = ""
-- L["Enchant Vellum"] = ""
L["Error creating operation. Operation with name '%s' already exists."] = "Fehler beim Erstellen des Prozesses. Ein Prozess mit Namen '%s' existiert bereits." -- Needs review
L[ [=[Estimated Cost: %s
Estimated Profit: %s]=] ] = [=[Vorrausichtliche Kosten: %s
Vorrausichtlicher Profit: %s]=] -- Needs review
-- L["Exclude Crafts with a Cooldown from Craft Cost"] = ""
L["Filters >>"] = "Filter >>" -- Needs review
-- L["First select a crafter"] = ""
L["Gather"] = "Sammeln" -- Needs review
-- L["Gather All Professions by Default if Only One Crafter"] = ""
L["Gathering"] = "Sammeln"
-- L["Gathering Crafting Mats"] = ""
-- L["Gather Items"] = ""
L["General"] = "Allgemein"
L["General Settings"] = "Allgemeine Einstellungen"
L["Give the new operation a name. A descriptive name will help you find this operation later."] = "Name für den neuen Prozess. Ein beschreibender Name hilft später beim Finden des Prozesses." -- Needs review
L["Guilds (Guild Banks) to Ignore:"] = "Gilden (Gildenbanken), die ignoriert werden:" -- Needs review
L["Here you can view and adjust how Crafting is calculating the price for this material."] = "Hier können Sie einsehen und anpassen wie \"Crafting\" die Preise für dieses Material kalkuliert."
L["<< Hide Queue"] = "<< Warteschlange verstecken" -- Needs review
-- L["If checked, Crafting will never try and craft inks as intermediate crafts."] = ""
-- L["If checked, if there is more than one way to craft the item then the craft cost will exclude any craft with a daily cooldown when calculating the lowest craft cost."] = ""
-- L["If checked, if there is only one crafter for the craft queue clicking gather will gather for all professions for that crafter"] = ""
L["If checked, the crafting cost of items will be shown in the tooltip for the item."] = "Wenn ausgewählt, werden die Herstellungskosten eines Gegenstandes im Tooltip angezeigt"
-- L["If checked, the material cost of items will be shown in the tooltip for the item."] = ""
-- L["If checked, when the TSM_Crafting frame is shown (when you open a profession), the default profession UI will also be shown."] = ""
L["Inventory Settings"] = "Inventareinstellungen"
L["Item Name"] = "Gegenstandsname"
L["Items will only be added to the queue if the number being added is greater than this number. This is useful if you don't want to bother with crafting singles for example."] = "Gegenstände werden nur zur Warteschlange hinzufügt, falls die hinzuzufügende Menge größer als diese Zahl ist. Dies ist beispielsweise praktisch, um die Herstellung einzelner Gegenstände zu vermeiden."
L["Item Value"] = "Wert des Gegenstands" -- Needs review
-- L["Left-Click|r to add this craft to the queue."] = ""
-- L["Link"] = ""
-- L["Mailing Craft Mats to %s"] = ""
-- L["Mail Items"] = ""
-- L["Mat Cost"] = ""
L["Material Cost Options"] = "Materialkosten - Optionen"
-- L["Material Name"] = ""
L["Materials:"] = "Materialien:" -- Needs review
L["Mat Price"] = "Materialpreis"
L["Max Restock Quantity"] = "Maximale herzustellende Menge"
L["Minimum Profit"] = "Mindest-Profit" -- Needs review
L["Min Restock Quantity"] = "Minimal herzustellende menge"
L["Name"] = "Name"
L["Need"] = "Benötigt"
-- L["Needed Mats at Current Source"] = ""
-- L["Never Queue Inks as Sub-Craftings"] = ""
L["New Operation"] = "Neuer Prozess" -- Needs review
-- L["<None>"] = ""
-- L["No Thanks"] = ""
-- L["Nothing To Gather"] = ""
-- L["Nothing to Mail"] = ""
-- L["Now select your profession(s)"] = ""
L["Number Owned"] = "Anzahl in Besitz"
-- L["Opens the Crafting window to the first profession."] = ""
L["Operation Name"] = "Prozessname" -- Needs review
L["Operations"] = "Prozesse" -- Needs review
L["Options"] = "Einstellungen"
-- L["Override Default Craft Price Method"] = ""
L["Percent to subtract from buyout when calculating profits (5% will compensate for AH cut)."] = "Vom Sofortkaufpreis abzuziehende % bei Berechnung des Profits (5% decken die AH Kosten)."
-- L["Please switch to the Shopping Tab to perform the gathering search."] = ""
L["Price:"] = "Preis:"
L["Price Settings"] = "Preiseinstellungen"
-- L["Price Source Filter"] = ""
-- L["Profession data not found for %s on %s. Logging into this player and opening the profression may solve this issue."] = ""
-- L["Profession Filter"] = ""
L["Professions"] = "Berufe" -- Needs review
-- L["Professions Used In"] = ""
L["Profit"] = "Profit"
L["Profit Deduction"] = "Profit abzug"
-- L["Profit (Total Profit):"] = ""
L["Queue"] = "Warteschlange" -- Needs review
-- L["Relationships"] = ""
-- L["Reset All Custom Prices to Default"] = ""
-- L["Reset all Custom Prices to Default Price Source."] = ""
-- L["Resets the material price for this item to the defualt value."] = ""
-- L["Reset to Default"] = ""
-- L["Restocking to a max of %d (min of %d) with a min profit."] = ""
-- L["Restocking to a max of %d (min of %d) with no min profit."] = ""
-- L["Restock Quantity Settings"] = ""
-- L["Restock Selected Groups"] = ""
-- L["Restock Settings"] = ""
-- L["Right-Click|r to subtract this craft from the queue."] = ""
-- L["%s Avail"] = ""
-- L["Search"] = ""
-- L["Search for Mats"] = ""
-- L["Select Crafter"] = ""
-- L["Select one of your characters' professions to browse."] = ""
-- L["Set Minimum Profit"] = ""
-- L["Shift-Left-Click|r to queue all you can craft."] = ""
-- L["Shift-Right-Click|r to remove all from queue."] = ""
L["Show Crafting Cost in Tooltip"] = "Zeige Herstellungskosten im Tooltip"
-- L["Show Default Profession Frame"] = ""
-- L["Show Material Cost in Tooltip"] = ""
L["Show Queue >>"] = "Warteschlange anzeigen >>" -- Needs review
L["'%s' is an invalid operation! Min restock of %d is higher than max restock of %d."] = "'%s' ist eine ungültiger Prozess! Min restock %d ist höher als max restock %d." -- Needs review
L["%s (%s profit)"] = "%s (Profit: %s)" -- Needs review
L["Stage %d"] = "Schritt %d" -- Needs review
-- L["Start Gathering"] = ""
-- L["Stop Gathering"] = ""
-- L["This is the default method Crafting will use for determining craft prices."] = ""
-- L["This is the default method Crafting will use for determining material cost."] = ""
L["Total"] = "Summe"
L["TSM Groups"] = "TSM-Gruppen" -- Needs review
L["Vendor"] = "NPC-Händler"
L["Visit Bank"] = "Bank besuchen"
L["Visit Guild Bank"] = "Gildenbank besuchen"
L["Visit Vendor"] = "Händler besuchen" -- Needs review
L["Warning: The min restock quantity must be lower than the max restock quantity."] = "Warnung: Die minimale Wiederauffüllungsmenge muss kleiner sein als die maximale."
L["When you click on the \"Restock Queue\" button enough of each craft will be queued so that you have this maximum number on hand. For example, if you have 2 of item X on hand and you set this to 4, 2 more will be added to the craft queue."] = "Wenn Sie oft genug auf den \"Restock Queue\" (Warteschlange aufstocken) Kopf drücken, wird jedes Teil in die Warteschlange gesetzt, sodass Sie die maximale (herstellbare) Anzahl vorrätig haben. Zum Beispiel: Wenn Sie 2 mal Item x vorrätig haben und Sie setzten den Wert auf 4, werden 2 weitere der Herstellungsliste hinzugefügt."
L["Would you like to automatically create some TradeSkillMaster groups for this profession?"] = "Möchtest du das TSM automatisch eine Guppe für diesen Beruf erstellt?" -- Needs review
L["You can click on one of the rows of the scrolling table below to view or adjust how the price of a material is calculated."] = "Auf eine der Reihen in der unteren Tabelle klicken, um die Preisberechnung für ein Material anzuzeigen und zu ändern." -- Needs review
+178
View File
@@ -0,0 +1,178 @@
-- ------------------------------------------------------------------------------------- --
-- TradeSkillMaster_Crafting - AddOn by Sapu94 --
-- http://www.curse.com/addons/wow/TradeSkillMaster_Crafting --
-- --
-- This addon is licensed under the CC BY-NC-ND 3.0 license as described at the --
-- following url: http://creativecommons.org/licenses/by-nc-nd/3.0/ --
-- Please contact the author via email at sapu94@gmail.com with any questions or --
-- concerns regarding this license. --
-- ------------------------------------------------------------------------------------- --
-- TradeSkillMaster_Crafting 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_Crafting", "enUS", true)
if not L then return end
L["%s (%s profit)"] = true
L["'%s' is an invalid operation! Min restock of %d is higher than max restock of %d."] = true
L["<< Hide Queue"] = true
L["<None>"] = true
L["AH"] = true
L["All"] = true
L["Are you sure you want to reset all material prices to the default value?"] = true
L["Ask Later"] = true
L["Auction House"] = true
L["Available Sources"] = true
L["Bags"] = true
L["Buy Vendor Items"] = true
L["Characters (Bags/Bank/AH/Mail) to Ignore:"] = true
L["Clear Filters"] = true
L["Clear Queue"] = true
L["Click Start Gathering"] = true
L["Collect Mail"] = true
L["Cost"] = true
L["Could not get link for profession."] = true
L["Craft Name"] = true
L["Craft Next"] = true
L["Craft Value Method"] = true
L["Craft Queue"] = true
L["Crafter"] = true
L["Crafts"] = true
L["Crafting Cost"] = true
L["Crafting Material Cost"] = true
L["Crafting operations contain settings for restocking the 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["Crafting will not queue any items affected by this operation with a profit below this value. As an example, a min profit of 'max(10g, 10% crafting)' would ensure a profit of at least 10g or 10% of the craft cost, whichever is highest."] = true
L["Create Profession Groups"] = true
L["Created profession group for %s."] = true
L["Current Source"] = true
L["Custom Price for this item."] = true
L["Custom Price per Item"] = true
L["Custom Price"] = true
L["Default Craft Value Method"] = true
L["Default Material Cost Method"] = true
L["Default Price Settings"] = true
L["Default Price"] = true
L["Destroying"] = true
L["Disenchant"] = true
L[" Disable Destroying Search"] = true
L["Enchant Vellum"] = true
L["Error creating operation. Operation with name '%s' already exists."] = true
L["Estimated Cost: %s\nEstimated Profit: %s"] = true
L["Exclude Crafts with a Cooldown from Craft Cost"] = true
L["Even Stacks"] = true
L["Filters >>"] = true
L["First select a crafter"] = true
L["Gather All Professions by Default if Only One Crafter"] = true
L["Gather Items"] = true
L["Gather"] = true
L["Gathering Crafting Mats"] = true
L["Gathering"] = 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["Guilds (Guild Banks) to Ignore:"] = true
L["Have Mats"] = true
L["Here you can view and adjust how Crafting is calculating the price for this material."] = true
L["If checked, Crafting will never try and craft inks as intermediate crafts."] = true
L["If checked, if there is more than one way to craft the item then the craft cost will exclude any craft with a daily cooldown when calculating the lowest craft cost."] = true
L["If checked, if there is only one crafter for the craft queue clicking gather will gather for all professions for that crafter"] = true
L["If checked, only crafts which you can craft with items in your bags (ignoring vendor items) will be shown below."] = true
L["If checked, only a normal AH search will be performed"] = true
L["If checked, the crafting cost of items will be shown in the tooltip for the item."] = true
L["If checked, the material cost of items will be shown in the tooltip for the item."] = true
L["If checked, the mats needed to craft an item and their prices will be shown in item tooltips."] = true
L["If checked, the AH destroying search will only look for even stacks"] = true
L["Inventory Settings"] = true
L["Item Name"] = true
L["Item Value"] = true
L["Items will only be added to the queue if the number being added is greater than this number. This is useful if you don't want to bother with crafting singles for example."] = true
L["Left-Click|r to add this craft to the queue."] = true
L["Link"] = true
L["List Mats in Tooltip"] = true
L["Mail Items"] = true
L["Mailing Craft Mats to %s"] = true
L["Management"] = true
L["Mat Cost"] = true
L["Mat Price"] = true
L["Material Cost Options"] = true
L["Material Name"] = true
L["Materials"] = true
L["Materials:"] = true
L["Max Restock Quantity"] = true
L["Milling"] = true
L["Min Restock Quantity"] = true
L["Minimum Profit"] = true
L["Name"] = true
L["Need"] = true
L["Never Queue Inks as Sub-Craftings"] = true
L["New Operation"] = true
L["No Thanks"] = true
L["Nothing To Gather"] = true
L["Nothing to Mail"] = true
L["Now select your profession(s)"] = true
L["Number Owned"] = true
L["Opens the Crafting window to the first profession."] = true
L["Operation Name"] = true
L["Operations"] = true
L["Options"] = true
L["Override Default Craft Value Method"] = true
L["Percent to subtract from buyout when calculating profits (5% will compensate for AH cut)."] = true
L["Please switch to the Shopping Tab to perform the gathering search."] = true
L["Price Settings"] = true
L["Price Source Filter"] = true
L["Price:"] = true
L["Profession Filter"] = true
L["Profession Frame Scale"] = true
L["Profession data not found for %s on %s. Logging into this player and opening the profession may solve this issue."] = true
L["Professions Used In"] = true
L["Professions"] = true
L["Profit (Total Profit):"] = true
L["Profit Deduction"] = true
L["Profit"] = true
L["Prospect"] = true
L["Queue"] = true
L["Queue Increment"] = true
L["Relationships"] = true
L["Reset All Custom Prices to Default"] = true
L["Reset all Custom Prices to Default Price Source."] = true
L["Reset to Default"] = true
L["Resets the material price for this item to the defualt value."] = true
L["Restock Quantity Settings"] = true
L["Restock Selected Groups"] = true
L["Restock Settings"] = true
L["Restocking to a max of %d (min of %d) with a min profit."] = true
L["Restocking to a max of %d (min of %d) with no min profit."] = true
L["Right-Click|r to subtract this craft from the queue."] = true
L["Search for Mats"] = true
L["Search"] = true
L["Select one of your characters' professions to browse."] = true
L["Set Minimum Profit"] = true
L["Shift-Left-Click|r to queue all you can craft."] = true
L["Shift-Right-Click|r to remove all from queue."] = true
L["Show Crafting Cost in Tooltip"] = true
L["Show Material Cost in Tooltip"] = true
L["Show Queue >>"] = true
L["Stage %d"] = true
L["Start Gathering"] = true
L["Stop Gathering"] = true
L["The scale of the profession frame."] = true
L["Transform"] = true
L["TSM Groups"] = true
L["This is the default method Crafting will use for determining the value of crafted items."] = true
L["This is the default method Crafting will use for determining material cost."] = true
L["This slider sets the quantity to add/remove from the queue when left/right clicking on a row below."] = true
L["Total"] = true
L["Total"] = true
L["Vendor"] = true
L["Visit Bank"] = true
L["Visit Guild Bank"] = true
L["Visit Vendor"] = true
L["Warning: The min restock quantity must be lower than the max restock quantity."] = true
L["When you click on the \"Restock Queue\" button enough of each craft will be queued so that you have this maximum number on hand. For example, if you have 2 of item X on hand and you set this to 4, 2 more will be added to the craft queue."] = true
L["Would you like to automatically create some TradeSkillMaster groups for this profession?"] = true
L["You can click on one of the rows of the scrolling table below to view or adjust how the price of a material is calculated."] = true
L["You can left/right click on a row to add/remove a craft from the crafting queue."] = true
L["Your craft value method for '%s' was invalid so it has been returned to the default. Details: %s"] = true
L["Your default craft value method was invalid so it has been returned to the default. Details: %s"] = true
+154
View File
@@ -0,0 +1,154 @@
-- ------------------------------------------------------------------------------------- --
-- TradeSkillMaster_Crafting - AddOn by Sapu94 --
-- http://wow.curse.com/downloads/wow-addons/details/tradeskillmaster_crafting.aspx --
-- --
-- This addon is licensed under the CC BY-NC-ND 3.0 license as described at the --
-- following url: http://creativecommons.org/licenses/by-nc-nd/3.0/ --
-- Please contact the author via email at sapu94@gmail.com with any questions or --
-- concerns regarding this license. --
-- ------------------------------------------------------------------------------------- --
-- TradeSkillMaster_Crafting Locale - esES
-- Please use the localization app on CurseForge to update this
-- http://wow.curseforge.com/addons/TradeSkillMaster_Crafting/localization/
local L = LibStub("AceLocale-3.0"):NewLocale("TradeSkillMaster_Crafting", "esES")
if not L then return end
L["All"] = "Todo"
-- L["Are you sure you want to reset all material prices to the default value?"] = ""
-- L["Ask Later"] = ""
L["Auction House"] = "Casa de Subastas "
-- L["Available Sources"] = ""
-- L["Buy Vendor Items"] = ""
-- L["Characters (Bags/Bank/AH/Mail) to Ignore:"] = ""
-- L["Clear Filters"] = ""
L["Clear Queue"] = "Borrar Cola"
-- L["Click Start Gathering"] = ""
-- L["Collect Mail"] = ""
-- L["Cost"] = ""
-- L["Could not get link for profession."] = ""
-- L["Crafting Cost"] = ""
-- L["Crafting Material Cost"] = ""
-- L["Crafting operations contain settings for restocking the 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["Crafting will not queue any items affected by this operation with a profit below this value. As an example, a min profit of 'max(10g, 10% crafting)' would ensure atleast a 10g and 10% profit."] = ""
L["Craft Next"] = "Fabricar Siguiente" -- Needs review
-- L["Craft Price Method"] = ""
-- L["Craft Queue"] = ""
-- L["Create Profession Groups"] = ""
-- L["Custom Price"] = ""
-- L["Custom Price for this item."] = ""
-- L["Custom Price per Item"] = ""
-- L["Default Craft Price Method"] = ""
-- L["Default Material Cost Method"] = ""
-- L["Default Price"] = ""
-- L["Default Price Settings"] = ""
-- L["Enchant Vellum"] = ""
-- L["Error creating operation. Operation with name '%s' already exists."] = ""
--[==[ L[ [=[Estimated Cost: %s
Estimated Profit: %s]=] ] = "" ]==]
-- L["Exclude Crafts with a Cooldown from Craft Cost"] = ""
-- L["Filters >>"] = ""
-- L["First select a crafter"] = ""
-- L["Gather"] = ""
-- L["Gather All Professions by Default if Only One Crafter"] = ""
-- L["Gathering"] = ""
-- L["Gathering Crafting Mats"] = ""
-- L["Gather Items"] = ""
-- L["General"] = ""
-- L["General Settings"] = ""
-- L["Give the new operation a name. A descriptive name will help you find this operation later."] = ""
-- L["Guilds (Guild Banks) to Ignore:"] = ""
-- L["Here you can view and adjust how Crafting is calculating the price for this material."] = ""
-- L["<< Hide Queue"] = ""
-- L["If checked, Crafting will never try and craft inks as intermediate crafts."] = ""
-- L["If checked, if there is more than one way to craft the item then the craft cost will exclude any craft with a daily cooldown when calculating the lowest craft cost."] = ""
-- L["If checked, if there is only one crafter for the craft queue clicking gather will gather for all professions for that crafter"] = ""
-- L["If checked, the crafting cost of items will be shown in the tooltip for the item."] = ""
-- L["If checked, the material cost of items will be shown in the tooltip for the item."] = ""
-- L["If checked, when the TSM_Crafting frame is shown (when you open a profession), the default profession UI will also be shown."] = ""
L["Inventory Settings"] = "Opciones de Inventario"
-- L["Item Name"] = ""
-- L["Items will only be added to the queue if the number being added is greater than this number. This is useful if you don't want to bother with crafting singles for example."] = ""
-- L["Item Value"] = ""
-- L["Left-Click|r to add this craft to the queue."] = ""
-- L["Link"] = ""
-- L["Mailing Craft Mats to %s"] = ""
-- L["Mail Items"] = ""
-- L["Mat Cost"] = ""
-- L["Material Cost Options"] = ""
-- L["Material Name"] = ""
-- L["Materials:"] = ""
-- L["Mat Price"] = ""
L["Max Restock Quantity"] = "Max Restock"
-- L["Minimum Profit"] = ""
L["Min Restock Quantity"] = "Min Restock"
L["Name"] = "Nombre"
L["Need"] = "Necesitas "
-- L["Needed Mats at Current Source"] = ""
-- L["Never Queue Inks as Sub-Craftings"] = ""
-- L["New Operation"] = ""
-- L["<None>"] = ""
-- L["No Thanks"] = ""
-- L["Nothing To Gather"] = ""
-- L["Nothing to Mail"] = ""
-- L["Now select your profession(s)"] = ""
-- L["Number Owned"] = ""
-- L["Opens the Crafting window to the first profession."] = ""
-- L["Operation Name"] = ""
-- L["Operations"] = ""
-- L["Options"] = ""
-- L["Override Default Craft Price Method"] = ""
-- L["Percent to subtract from buyout when calculating profits (5% will compensate for AH cut)."] = ""
-- L["Please switch to the Shopping Tab to perform the gathering search."] = ""
-- L["Price:"] = ""
L["Price Settings"] = "Opciones de Precio:"
-- L["Price Source Filter"] = ""
-- L["Profession data not found for %s on %s. Logging into this player and opening the profression may solve this issue."] = ""
-- L["Profession Filter"] = ""
-- L["Professions"] = ""
-- L["Professions Used In"] = ""
L["Profit"] = "Beneficio"
L["Profit Deduction"] = "Beneficio deducido" -- Needs review
-- L["Profit (Total Profit):"] = ""
-- L["Queue"] = ""
-- L["Relationships"] = ""
-- L["Reset All Custom Prices to Default"] = ""
-- L["Reset all Custom Prices to Default Price Source."] = ""
-- L["Resets the material price for this item to the defualt value."] = ""
-- L["Reset to Default"] = ""
-- L["Restocking to a max of %d (min of %d) with a min profit."] = ""
-- L["Restocking to a max of %d (min of %d) with no min profit."] = ""
-- L["Restock Quantity Settings"] = ""
-- L["Restock Selected Groups"] = ""
-- L["Restock Settings"] = ""
-- L["Right-Click|r to subtract this craft from the queue."] = ""
-- L["%s Avail"] = ""
-- L["Search"] = ""
-- L["Search for Mats"] = ""
-- L["Select Crafter"] = ""
-- L["Select one of your characters' professions to browse."] = ""
-- L["Set Minimum Profit"] = ""
-- L["Shift-Left-Click|r to queue all you can craft."] = ""
-- L["Shift-Right-Click|r to remove all from queue."] = ""
-- L["Show Crafting Cost in Tooltip"] = ""
-- L["Show Default Profession Frame"] = ""
-- L["Show Material Cost in Tooltip"] = ""
-- L["Show Queue >>"] = ""
-- L["'%s' is an invalid operation! Min restock of %d is higher than max restock of %d."] = ""
-- L["%s (%s profit)"] = ""
-- L["Stage %d"] = ""
-- L["Start Gathering"] = ""
-- L["Stop Gathering"] = ""
-- L["This is the default method Crafting will use for determining craft prices."] = ""
-- L["This is the default method Crafting will use for determining material cost."] = ""
L["Total"] = "Total" -- Needs review
-- L["TSM Groups"] = ""
-- L["Vendor"] = ""
-- L["Visit Bank"] = ""
-- L["Visit Guild Bank"] = ""
-- L["Visit Vendor"] = ""
-- L["Warning: The min restock quantity must be lower than the max restock quantity."] = ""
-- L["When you click on the \"Restock Queue\" button enough of each craft will be queued so that you have this maximum number on hand. For example, if you have 2 of item X on hand and you set this to 4, 2 more will be added to the craft queue."] = ""
-- L["Would you like to automatically create some TradeSkillMaster groups for this profession?"] = ""
-- L["You can click on one of the rows of the scrolling table below to view or adjust how the price of a material is calculated."] = ""
+154
View File
@@ -0,0 +1,154 @@
-- ------------------------------------------------------------------------------------- --
-- TradeSkillMaster_Crafting - AddOn by Sapu94 --
-- http://wow.curse.com/downloads/wow-addons/details/tradeskillmaster_crafting.aspx --
-- --
-- This addon is licensed under the CC BY-NC-ND 3.0 license as described at the --
-- following url: http://creativecommons.org/licenses/by-nc-nd/3.0/ --
-- Please contact the author via email at sapu94@gmail.com with any questions or --
-- concerns regarding this license. --
-- ------------------------------------------------------------------------------------- --
-- TradeSkillMaster_Crafting Locale - esMX
-- Please use the localization app on CurseForge to update this
-- http://wow.curseforge.com/addons/TradeSkillMaster_Crafting/localization/
local L = LibStub("AceLocale-3.0"):NewLocale("TradeSkillMaster_Crafting", "esMX")
if not L then return end
-- L["All"] = ""
-- L["Are you sure you want to reset all material prices to the default value?"] = ""
-- L["Ask Later"] = ""
-- L["Auction House"] = ""
-- L["Available Sources"] = ""
-- L["Buy Vendor Items"] = ""
-- L["Characters (Bags/Bank/AH/Mail) to Ignore:"] = ""
-- L["Clear Filters"] = ""
L["Clear Queue"] = "Limpiar cola."
-- L["Click Start Gathering"] = ""
-- L["Collect Mail"] = ""
-- L["Cost"] = ""
-- L["Could not get link for profession."] = ""
-- L["Crafting Cost"] = ""
-- L["Crafting Material Cost"] = ""
-- L["Crafting operations contain settings for restocking the 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["Crafting will not queue any items affected by this operation with a profit below this value. As an example, a min profit of 'max(10g, 10% crafting)' would ensure atleast a 10g and 10% profit."] = ""
L["Craft Next"] = "Crear siguiente"
-- L["Craft Price Method"] = ""
-- L["Craft Queue"] = ""
-- L["Create Profession Groups"] = ""
-- L["Custom Price"] = ""
-- L["Custom Price for this item."] = ""
-- L["Custom Price per Item"] = ""
-- L["Default Craft Price Method"] = ""
-- L["Default Material Cost Method"] = ""
-- L["Default Price"] = ""
-- L["Default Price Settings"] = ""
-- L["Enchant Vellum"] = ""
-- L["Error creating operation. Operation with name '%s' already exists."] = ""
--[==[ L[ [=[Estimated Cost: %s
Estimated Profit: %s]=] ] = "" ]==]
-- L["Exclude Crafts with a Cooldown from Craft Cost"] = ""
-- L["Filters >>"] = ""
-- L["First select a crafter"] = ""
-- L["Gather"] = ""
-- L["Gather All Professions by Default if Only One Crafter"] = ""
L["Gathering"] = "Recolección"
-- L["Gathering Crafting Mats"] = ""
-- L["Gather Items"] = ""
L["General"] = "General"
-- L["General Settings"] = ""
-- L["Give the new operation a name. A descriptive name will help you find this operation later."] = ""
-- L["Guilds (Guild Banks) to Ignore:"] = ""
-- L["Here you can view and adjust how Crafting is calculating the price for this material."] = ""
-- L["<< Hide Queue"] = ""
-- L["If checked, Crafting will never try and craft inks as intermediate crafts."] = ""
-- L["If checked, if there is more than one way to craft the item then the craft cost will exclude any craft with a daily cooldown when calculating the lowest craft cost."] = ""
-- L["If checked, if there is only one crafter for the craft queue clicking gather will gather for all professions for that crafter"] = ""
-- L["If checked, the crafting cost of items will be shown in the tooltip for the item."] = ""
-- L["If checked, the material cost of items will be shown in the tooltip for the item."] = ""
-- L["If checked, when the TSM_Crafting frame is shown (when you open a profession), the default profession UI will also be shown."] = ""
L["Inventory Settings"] = "Configuración de Inventario"
-- L["Item Name"] = ""
L["Items will only be added to the queue if the number being added is greater than this number. This is useful if you don't want to bother with crafting singles for example."] = "Los objetos se agregaran a la cola solo si el número agregado es mayor que este número. Esto es utíl si no quieres molestarte en crear objetos en singular por ejemplo. " -- Needs review
-- L["Item Value"] = ""
-- L["Left-Click|r to add this craft to the queue."] = ""
-- L["Link"] = ""
-- L["Mailing Craft Mats to %s"] = ""
-- L["Mail Items"] = ""
-- L["Mat Cost"] = ""
-- L["Material Cost Options"] = ""
-- L["Material Name"] = ""
-- L["Materials:"] = ""
-- L["Mat Price"] = ""
L["Max Restock Quantity"] = "Cantidad de Reposición maxima"
-- L["Minimum Profit"] = ""
L["Min Restock Quantity"] = "Cantidad de Reposición mínima"
L["Name"] = "Nombre"
L["Need"] = "Necesidad"
-- L["Needed Mats at Current Source"] = ""
-- L["Never Queue Inks as Sub-Craftings"] = ""
-- L["New Operation"] = ""
-- L["<None>"] = ""
-- L["No Thanks"] = ""
-- L["Nothing To Gather"] = ""
-- L["Nothing to Mail"] = ""
-- L["Now select your profession(s)"] = ""
-- L["Number Owned"] = ""
-- L["Opens the Crafting window to the first profession."] = ""
-- L["Operation Name"] = ""
-- L["Operations"] = ""
-- L["Options"] = ""
-- L["Override Default Craft Price Method"] = ""
L["Percent to subtract from buyout when calculating profits (5% will compensate for AH cut)."] = "Porcentaje a extraer del precio "
-- L["Please switch to the Shopping Tab to perform the gathering search."] = ""
-- L["Price:"] = ""
L["Price Settings"] = "Configuración de precios"
-- L["Price Source Filter"] = ""
-- L["Profession data not found for %s on %s. Logging into this player and opening the profression may solve this issue."] = ""
-- L["Profession Filter"] = ""
-- L["Professions"] = ""
-- L["Professions Used In"] = ""
L["Profit"] = "Ganancia"
L["Profit Deduction"] = "Deducción de ganancia"
-- L["Profit (Total Profit):"] = ""
-- L["Queue"] = ""
-- L["Relationships"] = ""
-- L["Reset All Custom Prices to Default"] = ""
-- L["Reset all Custom Prices to Default Price Source."] = ""
-- L["Resets the material price for this item to the defualt value."] = ""
-- L["Reset to Default"] = ""
-- L["Restocking to a max of %d (min of %d) with a min profit."] = ""
-- L["Restocking to a max of %d (min of %d) with no min profit."] = ""
-- L["Restock Quantity Settings"] = ""
-- L["Restock Selected Groups"] = ""
-- L["Restock Settings"] = ""
-- L["Right-Click|r to subtract this craft from the queue."] = ""
-- L["%s Avail"] = ""
-- L["Search"] = ""
-- L["Search for Mats"] = ""
-- L["Select Crafter"] = ""
-- L["Select one of your characters' professions to browse."] = ""
-- L["Set Minimum Profit"] = ""
-- L["Shift-Left-Click|r to queue all you can craft."] = ""
-- L["Shift-Right-Click|r to remove all from queue."] = ""
-- L["Show Crafting Cost in Tooltip"] = ""
-- L["Show Default Profession Frame"] = ""
-- L["Show Material Cost in Tooltip"] = ""
-- L["Show Queue >>"] = ""
-- L["'%s' is an invalid operation! Min restock of %d is higher than max restock of %d."] = ""
-- L["%s (%s profit)"] = ""
-- L["Stage %d"] = ""
-- L["Start Gathering"] = ""
-- L["Stop Gathering"] = ""
-- L["This is the default method Crafting will use for determining craft prices."] = ""
-- L["This is the default method Crafting will use for determining material cost."] = ""
L["Total"] = "Total"
-- L["TSM Groups"] = ""
-- L["Vendor"] = ""
-- L["Visit Bank"] = ""
-- L["Visit Guild Bank"] = ""
-- L["Visit Vendor"] = ""
-- L["Warning: The min restock quantity must be lower than the max restock quantity."] = ""
-- L["When you click on the \"Restock Queue\" button enough of each craft will be queued so that you have this maximum number on hand. For example, if you have 2 of item X on hand and you set this to 4, 2 more will be added to the craft queue."] = ""
-- L["Would you like to automatically create some TradeSkillMaster groups for this profession?"] = ""
-- L["You can click on one of the rows of the scrolling table below to view or adjust how the price of a material is calculated."] = ""
+154
View File
@@ -0,0 +1,154 @@
-- ------------------------------------------------------------------------------------- --
-- TradeSkillMaster_Crafting - AddOn by Sapu94 --
-- http://wow.curse.com/downloads/wow-addons/details/tradeskillmaster_crafting.aspx --
-- --
-- This addon is licensed under the CC BY-NC-ND 3.0 license as described at the --
-- following url: http://creativecommons.org/licenses/by-nc-nd/3.0/ --
-- Please contact the author via email at sapu94@gmail.com with any questions or --
-- concerns regarding this license. --
-- ------------------------------------------------------------------------------------- --
-- TradeSkillMaster_Crafting Locale - frFR
-- Please use the localization app on CurseForge to update this
-- http://wow.curseforge.com/addons/TradeSkillMaster_Crafting/localization/
local L = LibStub("AceLocale-3.0"):NewLocale("TradeSkillMaster_Crafting", "frFR")
if not L then return end
L["All"] = "Tous"
-- L["Are you sure you want to reset all material prices to the default value?"] = ""
-- L["Ask Later"] = ""
L["Auction House"] = "Hôtel des ventes"
-- L["Available Sources"] = ""
-- L["Buy Vendor Items"] = ""
-- L["Characters (Bags/Bank/AH/Mail) to Ignore:"] = ""
-- L["Clear Filters"] = ""
L["Clear Queue"] = "Vider la file d'attente"
-- L["Click Start Gathering"] = ""
-- L["Collect Mail"] = ""
L["Cost"] = "Coût"
-- L["Could not get link for profession."] = ""
-- L["Crafting Cost"] = ""
-- L["Crafting Material Cost"] = ""
-- L["Crafting operations contain settings for restocking the 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["Crafting will not queue any items affected by this operation with a profit below this value. As an example, a min profit of 'max(10g, 10% crafting)' would ensure atleast a 10g and 10% profit."] = ""
L["Craft Next"] = "Craft suivant"
-- L["Craft Price Method"] = ""
-- L["Craft Queue"] = ""
-- L["Create Profession Groups"] = ""
-- L["Custom Price"] = ""
-- L["Custom Price for this item."] = ""
-- L["Custom Price per Item"] = ""
-- L["Default Craft Price Method"] = ""
-- L["Default Material Cost Method"] = ""
-- L["Default Price"] = ""
-- L["Default Price Settings"] = ""
-- L["Enchant Vellum"] = ""
-- L["Error creating operation. Operation with name '%s' already exists."] = ""
--[==[ L[ [=[Estimated Cost: %s
Estimated Profit: %s]=] ] = "" ]==]
-- L["Exclude Crafts with a Cooldown from Craft Cost"] = ""
-- L["Filters >>"] = ""
-- L["First select a crafter"] = ""
-- L["Gather"] = ""
-- L["Gather All Professions by Default if Only One Crafter"] = ""
L["Gathering"] = "Gathering"
-- L["Gathering Crafting Mats"] = ""
-- L["Gather Items"] = ""
L["General"] = "Général"
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["Guilds (Guild Banks) to Ignore:"] = ""
-- L["Here you can view and adjust how Crafting is calculating the price for this material."] = ""
-- L["<< Hide Queue"] = ""
-- L["If checked, Crafting will never try and craft inks as intermediate crafts."] = ""
-- L["If checked, if there is more than one way to craft the item then the craft cost will exclude any craft with a daily cooldown when calculating the lowest craft cost."] = ""
-- L["If checked, if there is only one crafter for the craft queue clicking gather will gather for all professions for that crafter"] = ""
L["If checked, the crafting cost of items will be shown in the tooltip for the item."] = "Si coché, le coût de craft d'un objet sera indiqué dans son tooltip."
-- L["If checked, the material cost of items will be shown in the tooltip for the item."] = ""
-- L["If checked, when the TSM_Crafting frame is shown (when you open a profession), the default profession UI will also be shown."] = ""
L["Inventory Settings"] = "Paramètres de l'inventaire"
-- L["Item Name"] = ""
L["Items will only be added to the queue if the number being added is greater than this number. This is useful if you don't want to bother with crafting singles for example."] = "Les objets seront ajoutés à la file dattente seulement si le nombre à ajouter est plus grand que ce nombre. C'est utile si vous ne voulez pas vous embêter à fabriquer des objets en 1 seul exemplaire par exemple." -- Needs review
-- L["Item Value"] = ""
-- L["Left-Click|r to add this craft to the queue."] = ""
-- L["Link"] = ""
-- L["Mailing Craft Mats to %s"] = ""
-- L["Mail Items"] = ""
-- L["Mat Cost"] = ""
-- L["Material Cost Options"] = ""
-- L["Material Name"] = ""
-- L["Materials:"] = ""
-- L["Mat Price"] = ""
L["Max Restock Quantity"] = "Quantité Max à réapprovisionner"
-- L["Minimum Profit"] = ""
L["Min Restock Quantity"] = "Quantité Min à réapprovisionner"
L["Name"] = "Nom"
L["Need"] = "Besoin"
-- L["Needed Mats at Current Source"] = ""
-- L["Never Queue Inks as Sub-Craftings"] = ""
-- L["New Operation"] = ""
-- L["<None>"] = ""
-- L["No Thanks"] = ""
-- L["Nothing To Gather"] = ""
-- L["Nothing to Mail"] = ""
-- L["Now select your profession(s)"] = ""
-- L["Number Owned"] = ""
-- L["Opens the Crafting window to the first profession."] = ""
-- L["Operation Name"] = ""
-- L["Operations"] = ""
L["Options"] = "Options"
-- L["Override Default Craft Price Method"] = ""
L["Percent to subtract from buyout when calculating profits (5% will compensate for AH cut)."] = "Pourcentage à retirer du prix d'achat lors du calcul du profit (5% compensera la commission de l'HV)"
-- L["Please switch to the Shopping Tab to perform the gathering search."] = ""
-- L["Price:"] = ""
L["Price Settings"] = "Paramètres des Prix"
-- L["Price Source Filter"] = ""
-- L["Profession data not found for %s on %s. Logging into this player and opening the profression may solve this issue."] = ""
-- L["Profession Filter"] = ""
-- L["Professions"] = ""
-- L["Professions Used In"] = ""
L["Profit"] = "Bénéfice"
L["Profit Deduction"] = "Déduction du Bénéfice"
-- L["Profit (Total Profit):"] = ""
-- L["Queue"] = ""
-- L["Relationships"] = ""
-- L["Reset All Custom Prices to Default"] = ""
-- L["Reset all Custom Prices to Default Price Source."] = ""
-- L["Resets the material price for this item to the defualt value."] = ""
-- L["Reset to Default"] = ""
-- L["Restocking to a max of %d (min of %d) with a min profit."] = ""
-- L["Restocking to a max of %d (min of %d) with no min profit."] = ""
-- L["Restock Quantity Settings"] = ""
-- L["Restock Selected Groups"] = ""
-- L["Restock Settings"] = ""
-- L["Right-Click|r to subtract this craft from the queue."] = ""
-- L["%s Avail"] = ""
-- L["Search"] = ""
-- L["Search for Mats"] = ""
-- L["Select Crafter"] = ""
-- L["Select one of your characters' professions to browse."] = ""
-- L["Set Minimum Profit"] = ""
-- L["Shift-Left-Click|r to queue all you can craft."] = ""
-- L["Shift-Right-Click|r to remove all from queue."] = ""
L["Show Crafting Cost in Tooltip"] = "Voir le coût du craft dans le tooltip"
-- L["Show Default Profession Frame"] = ""
-- L["Show Material Cost in Tooltip"] = ""
-- L["Show Queue >>"] = ""
-- L["'%s' is an invalid operation! Min restock of %d is higher than max restock of %d."] = ""
-- L["%s (%s profit)"] = ""
-- L["Stage %d"] = ""
-- L["Start Gathering"] = ""
-- L["Stop Gathering"] = ""
-- L["This is the default method Crafting will use for determining craft prices."] = ""
-- L["This is the default method Crafting will use for determining material cost."] = ""
L["Total"] = "Total"
-- L["TSM Groups"] = ""
-- L["Vendor"] = ""
-- L["Visit Bank"] = ""
-- L["Visit Guild Bank"] = ""
-- L["Visit Vendor"] = ""
L["Warning: The min restock quantity must be lower than the max restock quantity."] = "Attention: La quantité minimum de réapprovisionnement doit être inférieure à la quantité maximum de réapprovisionnement."
L["When you click on the \"Restock Queue\" button enough of each craft will be queued so that you have this maximum number on hand. For example, if you have 2 of item X on hand and you set this to 4, 2 more will be added to the craft queue."] = "Lorsque vous cliquez sur le bouton \"Réapprovisionnement\" chacun des craft sera ajouté à la file d'attente pour que vous ayez la quantité Max à réapprovisionner dans vos sacs. Exemple: Si vous avez 2x l'objet Y sur vous, et que vous avez choisi 5 comme quantité Max à réapprovisionner, l'objet Y sera ajouté 3x dans la file d'attente."
-- L["Would you like to automatically create some TradeSkillMaster groups for this profession?"] = ""
-- L["You can click on one of the rows of the scrolling table below to view or adjust how the price of a material is calculated."] = ""
+154
View File
@@ -0,0 +1,154 @@
-- ------------------------------------------------------------------------------------- --
-- TradeSkillMaster_Crafting - AddOn by Sapu94 --
-- http://wow.curse.com/downloads/wow-addons/details/tradeskillmaster_crafting.aspx --
-- --
-- This addon is licensed under the CC BY-NC-ND 3.0 license as described at the --
-- following url: http://creativecommons.org/licenses/by-nc-nd/3.0/ --
-- Please contact the author via email at sapu94@gmail.com with any questions or --
-- concerns regarding this license. --
-- ------------------------------------------------------------------------------------- --
-- TradeSkillMaster_Crafting Locale - koKR
-- Please use the localization app on CurseForge to update this
-- http://wow.curseforge.com/addons/TradeSkillMaster_Crafting/localization/
local L = LibStub("AceLocale-3.0"):NewLocale("TradeSkillMaster_Crafting", "koKR")
if not L then return end
L["All"] = "모두"
L["Are you sure you want to reset all material prices to the default value?"] = "정말로 모든 재료 가격을 기본값으로 재설정하시겠습니까?" -- Needs review
L["Ask Later"] = "나중에" -- Needs review
L["Auction House"] = "경매장"
L["Available Sources"] = "가능한 출처" -- Needs review
L["Buy Vendor Items"] = "상인 아이템 구매" -- Needs review
L["Characters (Bags/Bank/AH/Mail) to Ignore:"] = "캐릭터 (가방/은행/경매장/우편) 무시:" -- Needs review
L["Clear Filters"] = "필터 지우기" -- Needs review
L["Clear Queue"] = "대기열 지우기" -- Needs review
L["Click Start Gathering"] = "클릭 수집 시작" -- Needs review
L["Collect Mail"] = "우편 수집" -- Needs review
L["Cost"] = "비용"
L["Could not get link for profession."] = "전문기술의 링크를 얻을 수 없습니다." -- Needs review
L["Crafting Cost"] = "제작 비용"
L["Crafting Material Cost"] = "제작 재료 비용" -- Needs review
L["Crafting operations contain settings for restocking the 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["Crafting will not queue any items affected by this operation with a profit below this value. As an example, a min profit of 'max(10g, 10% crafting)' would ensure atleast a 10g and 10% profit."] = "여기서 지정한 값 보다 낮은 수익을 발생하는 아이템은 대기열에 등록되지 않습니다. 예를 들면, 'max(10g, 10% crafting)'는 최소한 10g 와 10% 수익을 보장합니다." -- Needs review
L["Craft Next"] = "다음 제작"
L["Craft Price Method"] = "제작 가격 방식" -- Needs review
L["Craft Queue"] = "제작 대기열" -- Needs review
L["Create Profession Groups"] = "전문기술 그룹 생성" -- Needs review
L["Custom Price"] = "사용자 가격" -- Needs review
L["Custom Price for this item."] = "이 아이템의 사용자 가격" -- Needs review
L["Custom Price per Item"] = "아이템별 사용자 가격" -- Needs review
L["Default Craft Price Method"] = "기본 제작 가격 방식" -- Needs review
L["Default Material Cost Method"] = "기본 재료 비용 방식" -- Needs review
L["Default Price"] = "기본 가격" -- Needs review
L["Default Price Settings"] = "기본 가격 설정" -- Needs review
L["Enchant Vellum"] = "마법부여 피지" -- Needs review
L["Error creating operation. Operation with name '%s' already exists."] = "작업 생성 중 오류가 발생했습니다. 작업 이름 '%s'이(가) 이미 존재합니다." -- Needs review
L[ [=[Estimated Cost: %s
Estimated Profit: %s]=] ] = "예상 비용: %s\\n예상 수익: %s" -- Needs review
L["Exclude Crafts with a Cooldown from Craft Cost"] = "쿨다운을 가진 제작은 제작 비용에서 제외" -- Needs review
L["Filters >>"] = "필터 >>" -- Needs review
L["First select a crafter"] = "제작자를 선택하세요." -- Needs review
L["Gather"] = "수집" -- Needs review
L["Gather All Professions by Default if Only One Crafter"] = "제작자가 한 명이면 기본으로 모든 전문기술을 수집" -- Needs review
L["Gathering"] = "수집" -- Needs review
L["Gathering Crafting Mats"] = "제작 재료 수집" -- Needs review
L["Gather Items"] = "아이템 수집" -- Needs review
L["General"] = "일반" -- 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["Guilds (Guild Banks) to Ignore:"] = "길드 (길드 은행) 무시:" -- Needs review
L["Here you can view and adjust how Crafting is calculating the price for this material."] = "여기서 재료 가격의 계산 방식을 확인하고 조절할 수 있습니다."
L["<< Hide Queue"] = "<< 대기열 감추기" -- Needs review
L["If checked, Crafting will never try and craft inks as intermediate crafts."] = "선택하면, 잉크는 중간 제작을 시도하지 않습니다." -- Needs review
L["If checked, if there is more than one way to craft the item then the craft cost will exclude any craft with a daily cooldown when calculating the lowest craft cost."] = "선택하면, 아이템을 제작하는 방법이 하나 이상이라면, 최저 제작 비용의 계산할 때 일일 쿨다운을 가진 제작 기술은 제외시킵니다." -- Needs review
L["If checked, if there is only one crafter for the craft queue clicking gather will gather for all professions for that crafter"] = "선택하면, 제작 대기열를 클릭하는 제작자가 한 명이라면 모든 전문기술의 재료를 수집합니다." -- Needs review
L["If checked, the crafting cost of items will be shown in the tooltip for the item."] = "선택하면, 제작 비용이 아이템의 툴팁에 표시됩니다."
L["If checked, the material cost of items will be shown in the tooltip for the item."] = "선택하면, 재료 비용이 아이템의 툴팁에 표시됩니다." -- Needs review
L["If checked, when the TSM_Crafting frame is shown (when you open a profession), the default profession UI will also be shown."] = "선택하면, TSM 제작 프레임이 열릴(전문기술 창을 열 때 ) 때 기본 전문기술 UI도 함께 열립니다." -- Needs review
L["Inventory Settings"] = "인벤토리 설정"
L["Item Name"] = "아이템 이름"
L["Items will only be added to the queue if the number being added is greater than this number. This is useful if you don't want to bother with crafting singles for example."] = "추가되는 수량이 아래 수량보다 큰 경우만 아이템이 대기열에 추가됩니다. 제작 수량이 한 개 이상인 아이템만을 제작하기 원할 때 유용합니다." -- Needs review
L["Item Value"] = "아이템 가치"
L["Left-Click|r to add this craft to the queue."] = "Left-Click|r 대기열에 추가합니다." -- Needs review
L["Link"] = "링크" -- Needs review
L["Mailing Craft Mats to %s"] = "제작 재료를 %s에게 발송" -- Needs review
L["Mail Items"] = "아이템 발송" -- Needs review
L["Mat Cost"] = "재료 비용" -- Needs review
L["Material Cost Options"] = "재료 비용 옵션"
L["Material Name"] = "재료 이름" -- Needs review
L["Materials:"] = "재료:" -- Needs review
L["Mat Price"] = "재료 가격"
L["Max Restock Quantity"] = "최대 수량"
L["Minimum Profit"] = "최소 수익" -- Needs review
L["Min Restock Quantity"] = "최소 수량"
L["Name"] = "이름"
L["Need"] = "필요"
L["Needed Mats at Current Source"] = "현재 출처의 재료 필요" -- Needs review
L["Never Queue Inks as Sub-Craftings"] = "잉크는 하위 제작 대기열 등록 안 함" -- Needs review
L["New Operation"] = "새 작업" -- Needs review
L["<None>"] = "<없음>"
L["No Thanks"] = "아니요" -- Needs review
L["Nothing To Gather"] = "수집할 아이템 없음" -- Needs review
L["Nothing to Mail"] = "발송할 아이템 없음" -- Needs review
L["Now select your profession(s)"] = "전문 직업 선택" -- Needs review
L["Number Owned"] = "소유 개수"
L["Opens the Crafting window to the first profession."] = "첫 전문기술 창을 엽니다." -- Needs review
L["Operation Name"] = "작업 이름" -- Needs review
L["Operations"] = "작업" -- Needs review
L["Options"] = "옵션"
L["Override Default Craft Price Method"] = "기본 제작 가격 방식 오버라이드" -- Needs review
L["Percent to subtract from buyout when calculating profits (5% will compensate for AH cut)."] = "수익을 계산할 때 구매가에서 뺄 비율 (경매장 수수료 5%의 손실 보상)"
L["Please switch to the Shopping Tab to perform the gathering search."] = "수집 검색을 수행하려면 쇼핑 탭으로 전환하세요." -- Needs review
L["Price:"] = "가격:"
L["Price Settings"] = "가격 설정"
L["Price Source Filter"] = "가격 출처 필터" -- Needs review
L["Profession data not found for %s on %s. Logging into this player and opening the profression may solve this issue."] = "전문 직업 %s 데이터를 %s에게서 찾을 수 없습니다. 해당 캐릭터로 로그인한 후 전문기술 창을 열면 문제를 해결할 수 있습니다." -- Needs review
L["Profession Filter"] = "전문기술 필터" -- Needs review
L["Professions"] = "전문기술" -- Needs review
L["Professions Used In"] = "사용 전문기술" -- Needs review
L["Profit"] = "수익"
L["Profit Deduction"] = "수익 공제" -- Needs review
L["Profit (Total Profit):"] = "수익 (총수익):" -- Needs review
L["Queue"] = "대기열" -- Needs review
L["Relationships"] = "관계" -- Needs review
L["Reset All Custom Prices to Default"] = "모든 사용자 가격을 기본으로 재설정" -- Needs review
L["Reset all Custom Prices to Default Price Source."] = "모든 사용자 가격을 기본 가격 출처로 재설정" -- Needs review
L["Resets the material price for this item to the defualt value."] = "이 아이템의 재료 가격을 기본 가격으로 재설정합니다." -- Needs review
L["Reset to Default"] = "기본으로 재설정" -- Needs review
L["Restocking to a max of %d (min of %d) with a min profit."] = "최소 수익으로 최대 %d (최소 %d) 재보충" -- Needs review
L["Restocking to a max of %d (min of %d) with no min profit."] = "최소 수익 없이 최대 %d (최소 %d) 재보충" -- Needs review
L["Restock Quantity Settings"] = "재보충 수량 설정" -- Needs review
L["Restock Selected Groups"] = "선택된 그룹 재보충" -- Needs review
L["Restock Settings"] = "재보충 설정" -- Needs review
L["Right-Click|r to subtract this craft from the queue."] = "Right-Click|r 대기열에서 제거합니다." -- Needs review
L["%s Avail"] = "%s 가능" -- Needs review
L["Search"] = "검색" -- Needs review
L["Search for Mats"] = "재료 검색" -- Needs review
L["Select Crafter"] = "제작자 선택" -- Needs review
L["Select one of your characters' professions to browse."] = "캐릭터의 전문기술중 하나를 선택하세요." -- Needs review
L["Set Minimum Profit"] = "최소 수익 설정" -- Needs review
L["Shift-Left-Click|r to queue all you can craft."] = "Shift-Left-Click|r 제작 가능한 모든 기술을 대기열에 추가합니다." -- Needs review
L["Shift-Right-Click|r to remove all from queue."] = "Shift-Right-Click|r 모두 대기열에서 제거합니다." -- Needs review
L["Show Crafting Cost in Tooltip"] = "툴팁에 제작 비용 표시"
L["Show Default Profession Frame"] = "기본 전문기술 프레임 표시" -- Needs review
L["Show Material Cost in Tooltip"] = "툴팁에 재료 비용 표시" -- Needs review
L["Show Queue >>"] = "대기열 보기 >>" -- Needs review
L["'%s' is an invalid operation! Min restock of %d is higher than max restock of %d."] = "'%s'은(는) 잘못된 작업입니다! 최소 재보충 수량(%d)이 최대 재보충 수량(%d)보다 큽니다." -- Needs review
L["%s (%s profit)"] = "%s (%s 수익)" -- Needs review
L["Stage %d"] = "단계 %d" -- Needs review
L["Start Gathering"] = "수집 시작" -- Needs review
L["Stop Gathering"] = "수집 중지" -- Needs review
L["This is the default method Crafting will use for determining craft prices."] = "제작 가격을 결정하는 데 사용할 기본 방식입니다." -- Needs review
L["This is the default method Crafting will use for determining material cost."] = "재료 가격을 결정하는 데 사용할 기본 방식입니다." -- Needs review
L["Total"] = "전체"
L["TSM Groups"] = "TSM 그룹" -- Needs review
L["Vendor"] = "상인"
L["Visit Bank"] = "은행 방문" -- Needs review
L["Visit Guild Bank"] = "길드 은행 방문" -- Needs review
L["Visit Vendor"] = "상인 방문" -- Needs review
L["Warning: The min restock quantity must be lower than the max restock quantity."] = "경고: 최소 재보충 수량은 최대 재보충 수량보다 작아야 합니다."
L["When you click on the \"Restock Queue\" button enough of each craft will be queued so that you have this maximum number on hand. For example, if you have 2 of item X on hand and you set this to 4, 2 more will be added to the craft queue."] = "\\\"재보충 대기열\\\" 버튼을 클릭할 때 최종적으로 얻게 될 수량에 맞춰 대기열에 등록됩니다. 예를 들면, 이미 2개를 소유하고 있는 아이템을 4개로 설정하면 대기열에는 2개만 추가됩니다." -- Needs review
L["Would you like to automatically create some TradeSkillMaster groups for this profession?"] = "자동으로 이 전문기술에 대한 몇 가지 그룹을 생성하시겠습니까?" -- Needs review
L["You can click on one of the rows of the scrolling table below to view or adjust how the price of a material is calculated."] = "재료 비용의 계산 방법을 보거나 조정하려면 아래의 스크롤 테이블에 있는 아이템을 클릭하세요."
+155
View File
@@ -0,0 +1,155 @@
-- ------------------------------------------------------------------------------------- --
-- TradeSkillMaster_Crafting - AddOn by Sapu94 --
-- http://wow.curse.com/downloads/wow-addons/details/TradeSkillMaster_Crafting.aspx --
-- --
-- This addon is licensed under the CC BY-NC-ND 3.0 license as described at the --
-- following url: http://creativecommons.org/licenses/by-nc-nd/3.0/ --
-- Please contact the author via email at sapu94@gmail.com with any questions or --
-- concerns regarding this license. --
-- ------------------------------------------------------------------------------------- --
-- TradeSkillMaster_Crafting Locale - ptBR
-- Please use the localization app on CurseForge to update this
-- http://wow.curseforge.com/addons/TradeSkillMaster_Crafting/localization/
local L = LibStub("AceLocale-3.0"):NewLocale("TradeSkillMaster_Crafting", "ptBR")
if not L then return end
L["All"] = "Todos" -- Needs review
-- L["Are you sure you want to reset all material prices to the default value?"] = ""
-- L["Ask Later"] = ""
L["Auction House"] = "Casa de Leilão" -- Needs review
-- L["Available Sources"] = ""
-- L["Buy Vendor Items"] = ""
-- L["Characters (Bags/Bank/AH/Mail) to Ignore:"] = ""
-- L["Clear Filters"] = ""
L["Clear Queue"] = "Limpar fila"
-- L["Click Start Gathering"] = ""
-- L["Collect Mail"] = ""
L["Cost"] = "Custo" -- Needs review
-- L["Could not get link for profession."] = ""
L["Crafting Cost"] = "Custo de Produção"
-- L["Crafting Material Cost"] = ""
-- L["Crafting operations contain settings for restocking the 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["Crafting will not queue any items affected by this operation with a profit below this value. As an example, a min profit of 'max(10g, 10% crafting)' would ensure atleast a 10g and 10% profit."] = ""
L["Craft Next"] = "Produzir próximo"
-- L["Craft Price Method"] = ""
-- L["Craft Queue"] = ""
-- L["Create Profession Groups"] = ""
-- L["Custom Price"] = ""
-- L["Custom Price for this item."] = ""
-- L["Custom Price per Item"] = ""
-- L["Default Craft Price Method"] = ""
-- L["Default Material Cost Method"] = ""
-- L["Default Price"] = ""
-- L["Default Price Settings"] = ""
-- L["Enchant Vellum"] = ""
-- L["Error creating operation. Operation with name '%s' already exists."] = ""
--[==[ L[ [=[Estimated Cost: %s
Estimated Profit: %s]=] ] = "" ]==]
-- L["Exclude Crafts with a Cooldown from Craft Cost"] = ""
-- L["Filters >>"] = ""
-- L["First select a crafter"] = ""
-- L["Gather"] = ""
-- L["Gather All Professions by Default if Only One Crafter"] = ""
L["Gathering"] = "Coleta"
-- L["Gathering Crafting Mats"] = ""
-- L["Gather Items"] = ""
L["General"] = "Geral"
L["General Settings"] = "Configurações Gerais" -- Needs review
-- L["Give the new operation a name. A descriptive name will help you find this operation later."] = ""
-- L["Guilds (Guild Banks) to Ignore:"] = ""
L["Here you can view and adjust how Crafting is calculating the price for this material."] = "Aqui você pode ver e ajustar como o Produção calcula o preço deste material." -- Needs review
L["<< Hide Queue"] = "<< Esconder a fila" -- Needs review
-- L["If checked, Crafting will never try and craft inks as intermediate crafts."] = ""
-- L["If checked, if there is more than one way to craft the item then the craft cost will exclude any craft with a daily cooldown when calculating the lowest craft cost."] = ""
-- L["If checked, if there is only one crafter for the craft queue clicking gather will gather for all professions for that crafter"] = ""
L["If checked, the crafting cost of items will be shown in the tooltip for the item."] = "Se marcado, o custo de produção dos itens será exibido na dica de interface do item." -- Needs review
-- L["If checked, the material cost of items will be shown in the tooltip for the item."] = ""
-- L["If checked, when the TSM_Crafting frame is shown (when you open a profession), the default profession UI will also be shown."] = ""
L["Inventory Settings"] = "Configurações de Invetário."
L["Item Name"] = "Nome do Item" -- Needs review
L["Items will only be added to the queue if the number being added is greater than this number. This is useful if you don't want to bother with crafting singles for example."] = "Itens somente serão adicionados à fila se o número a ser adicionado for maior que este número. Isto é útil se você não quer se preocupar em produzir um único item, por exemplo."
L["Item Value"] = "Valor do Item"
-- L["Left-Click|r to add this craft to the queue."] = ""
-- L["Link"] = ""
-- L["Mailing Craft Mats to %s"] = ""
-- L["Mail Items"] = ""
-- L["Mat Cost"] = ""
L["Material Cost Options"] = "Opções do Custo de Material" -- Needs review
-- L["Material Name"] = ""
-- L["Materials:"] = ""
L["Mat Price"] = "Preço do Material" -- Needs review
L["Max Restock Quantity"] = "Quatindade máxima de reestocagem" -- Needs review
-- L["Minimum Profit"] = ""
L["Min Restock Quantity"] = "Quantidade mínima para reabastecimento "
L["Name"] = "Nome"
L["Need"] = "Precisa" -- Needs review
-- L["Needed Mats at Current Source"] = ""
-- L["Never Queue Inks as Sub-Craftings"] = ""
-- L["New Operation"] = ""
-- L["<None>"] = ""
-- L["No Thanks"] = ""
-- L["Nothing To Gather"] = ""
-- L["Nothing to Mail"] = ""
-- L["Now select your profession(s)"] = ""
L["Number Owned"] = "Número possuído" -- Needs review
-- L["Opens the Crafting window to the first profession."] = ""
-- L["Operation Name"] = ""
-- L["Operations"] = ""
L["Options"] = "Opções" -- Needs review
-- L["Override Default Craft Price Method"] = ""
L["Percent to subtract from buyout when calculating profits (5% will compensate for AH cut)."] = "Porcentagem a ser subtraída do arremate quando calcular os lucros (5% compensará a comissão da CL)"
-- L["Please switch to the Shopping Tab to perform the gathering search."] = ""
L["Price:"] = "Preço:" -- Needs review
L["Price Settings"] = "Configurações de Preço"
-- L["Price Source Filter"] = ""
-- L["Profession data not found for %s on %s. Logging into this player and opening the profression may solve this issue."] = ""
-- L["Profession Filter"] = ""
-- L["Professions"] = ""
-- L["Professions Used In"] = ""
L["Profit"] = "Lucro" -- Needs review
L["Profit Deduction"] = "Redução do Lucro" -- Needs review
-- L["Profit (Total Profit):"] = ""
-- L["Queue"] = ""
-- L["Relationships"] = ""
-- L["Reset All Custom Prices to Default"] = ""
-- L["Reset all Custom Prices to Default Price Source."] = ""
-- L["Resets the material price for this item to the defualt value."] = ""
-- L["Reset to Default"] = ""
-- L["Restocking to a max of %d (min of %d) with a min profit."] = ""
-- L["Restocking to a max of %d (min of %d) with no min profit."] = ""
-- L["Restock Quantity Settings"] = ""
-- L["Restock Selected Groups"] = ""
-- L["Restock Settings"] = ""
-- L["Right-Click|r to subtract this craft from the queue."] = ""
-- L["%s Avail"] = ""
-- L["Search"] = ""
-- L["Search for Mats"] = ""
-- L["Select Crafter"] = ""
-- L["Select one of your characters' professions to browse."] = ""
-- L["Set Minimum Profit"] = ""
-- L["Shift-Left-Click|r to queue all you can craft."] = ""
-- L["Shift-Right-Click|r to remove all from queue."] = ""
L["Show Crafting Cost in Tooltip"] = "Mostar Custo de Produção na Dica de Interface" -- Needs review
-- L["Show Default Profession Frame"] = ""
-- L["Show Material Cost in Tooltip"] = ""
L["Show Queue >>"] = "Mostrar Fila >>" -- Needs review
-- L["'%s' is an invalid operation! Min restock of %d is higher than max restock of %d."] = ""
L["%s (%s profit)"] = "%s (%s lucro)" -- Needs review
-- L["Stage %d"] = ""
-- L["Start Gathering"] = ""
-- L["Stop Gathering"] = ""
-- L["This is the default method Crafting will use for determining craft prices."] = ""
-- L["This is the default method Crafting will use for determining material cost."] = ""
L["Total"] = "Total" -- Needs review
-- L["TSM Groups"] = ""
L["Vendor"] = "Vendedor"
-- L["Visit Bank"] = ""
-- L["Visit Guild Bank"] = ""
-- L["Visit Vendor"] = ""
L["Warning: The min restock quantity must be lower than the max restock quantity."] = "Atenção: A quantidade de reabastecimento mínima deve ser menor que a quantidade de reabastecimento máxima." -- Needs review
L["When you click on the \"Restock Queue\" button enough of each craft will be queued so that you have this maximum number on hand. For example, if you have 2 of item X on hand and you set this to 4, 2 more will be added to the craft queue."] = "Quando você clica no botão \"Fila de Reabastecimento\" serão enfileirados a quantidade suficiente de cada produto para que você tenha esse número máximo em mãos. Por exemplo, se você tem 2 do item X em mãos e configurou para 4, mais 2 serão adicionados à fila de produção." -- Needs review
-- L["Would you like to automatically create some TradeSkillMaster groups for this profession?"] = ""
L["You can click on one of the rows of the scrolling table below to view or adjust how the price of a material is calculated."] = "Você pode clicar em uma das linhas da tabela rolante abaixo para visualizar ou ajustar como o preço de um material é calculado."
+155
View File
@@ -0,0 +1,155 @@
-- ------------------------------------------------------------------------------------- --
-- TradeSkillMaster_Crafting - AddOn by Sapu94 --
-- http://wow.curse.com/downloads/wow-addons/details/tradeskillmaster_crafting.aspx --
-- --
-- This addon is licensed under the CC BY-NC-ND 3.0 license as described at the --
-- following url: http://creativecommons.org/licenses/by-nc-nd/3.0/ --
-- Please contact the author via email at sapu94@gmail.com with any questions or --
-- concerns regarding this license. --
-- ------------------------------------------------------------------------------------- --
-- TradeSkillMaster_Crafting Locale - ruRU
-- Please use the localization app on CurseForge to update this
-- http://wow.curseforge.com/addons/TradeSkillMaster_Crafting/localization/
local L = LibStub("AceLocale-3.0"):NewLocale("TradeSkillMaster_Crafting", "ruRU")
if not L then return end
L["All"] = "Все"
L["Are you sure you want to reset all material prices to the default value?"] = "Вы уверены, что хотите установить все цены на материалы по умолчанию?"
L["Ask Later"] = "Спросить позже"
L["Auction House"] = "Аукцион"
L["Available Sources"] = "Доступные источники"
L["Buy Vendor Items"] = "Купить у вендора"
L["Characters (Bags/Bank/AH/Mail) to Ignore:"] = "Игнорировать (Сумки/Банк/Аукцион/Почту) персонажа:"
L["Clear Filters"] = "Очистить фильтры"
L["Clear Queue"] = "Очистить очередь"
L["Click Start Gathering"] = "Нажмите для начала сбора"
L["Collect Mail"] = "Сбор почты"
L["Cost"] = "Стоимость"
L["Could not get link for profession."] = "Не удалось получить ссылку профессии"
L["Crafting Cost"] = "Стоимость создания"
L["Crafting Material Cost"] = "Стоимость материалов для крафта"
L["Crafting operations contain settings for restocking the items in a group. Type the name of the new operation into the box below and hit 'enter' to create a new Crafting operation."] = "Crafting операции содержат настройки по пополнению предметов в группе. Введите название новой операции в поле ниже и нажмите 'Enter' для создания новой Crafting операции."
L["Crafting will not queue any items affected by this operation with a profit below this value. As an example, a min profit of 'max(10g, 10% crafting)' would ensure atleast a 10g and 10% profit."] = "Крафт с прибылью менее указанного значения не будет добавлен в очередь. Пример: минимальная прибыль 'максимум(10з, 10% крафта)' чтобы получить минимум 10з или 10% прибыли."
L["Craft Next"] = "Создать следующее"
L["Craft Price Method"] = "Расчет цены крафта" -- Needs review
L["Craft Queue"] = "Очередь крафта"
L["Create Profession Groups"] = "Создать группу профессии" -- Needs review
L["Custom Price"] = "Своя цена"
L["Custom Price for this item."] = "Своя цена за этот предмет"
L["Custom Price per Item"] = "Своя цена за предмет"
L["Default Craft Price Method"] = "Метод расчета цены по умолчанию"
L["Default Material Cost Method"] = "Метод расчета цены материалов по умолчанию"
L["Default Price"] = "Цена по умолчанию"
L["Default Price Settings"] = "Настройка цены по умолчанию" -- Needs review
L["Enchant Vellum"] = "Материал для наложения чар" -- Needs review
L["Error creating operation. Operation with name '%s' already exists."] = "Ошибка создания операции. Операция с названием '%s' уже существует." -- Needs review
L[ [=[Estimated Cost: %s
Estimated Profit: %s]=] ] = [=[Оценочная стоимость: %s
Оценочная прибыль: %s]=]
L["Exclude Crafts with a Cooldown from Craft Cost"] = "Исключать крафты с временем восстановления из цены крафта" -- Needs review
L["Filters >>"] = "Фильтры >>"
-- L["First select a crafter"] = ""
L["Gather"] = "Собрать" -- Needs review
L["Gather All Professions by Default if Only One Crafter"] = "Собрать все профессии по умолчанию только для одного персонажа" -- Needs review
L["Gathering"] = "Собрать"
L["Gathering Crafting Mats"] = "Сбор материалов для крафта" -- Needs review
L["Gather Items"] = "Собрать предметы"
L["General"] = "Общее"
L["General Settings"] = "Общие настройки"
L["Give the new operation a name. A descriptive name will help you find this operation later."] = "Дайте новое имя для операции. Оно поможет найти вам её позже." -- Needs review
L["Guilds (Guild Banks) to Ignore:"] = "Игнорировать (Гильд. Банк) гильдию:" -- Needs review
L["Here you can view and adjust how Crafting is calculating the price for this material."] = "Здесь можно увидеть и изменить как Crafting считает цены на этот материал."
L["<< Hide Queue"] = "Скрыть очередь"
-- L["If checked, Crafting will never try and craft inks as intermediate crafts."] = ""
L["If checked, if there is more than one way to craft the item then the craft cost will exclude any craft with a daily cooldown when calculating the lowest craft cost."] = "При расчете самой низкой стоимости крафта, выбирать метод получения материала без времени восстановления (если такой имеется)" -- Needs review
-- L["If checked, if there is only one crafter for the craft queue clicking gather will gather for all professions for that crafter"] = ""
L["If checked, the crafting cost of items will be shown in the tooltip for the item."] = "Отметьте для показа стоимости создания предмета в подсказке."
L["If checked, the material cost of items will be shown in the tooltip for the item."] = "Показывать стоимость материалов для изготовления в подсказке" -- Needs review
L["If checked, when the TSM_Crafting frame is shown (when you open a profession), the default profession UI will also be shown."] = "Показывать фрейм TSM_Crafting (если профессия открыта), стандартное UI профессии тоже будет показано" -- Needs review
L["Inventory Settings"] = "Настройки инвентаря"
L["Item Name"] = "Название предмета"
L["Items will only be added to the queue if the number being added is greater than this number. This is useful if you don't want to bother with crafting singles for example."] = "Предметы будут добавлены в очередь только если их кол-во больше этого числа. Полезно, если вы не хотите создавать единичные предметы."
L["Item Value"] = "Стоимость предмета" -- Needs review
L["Left-Click|r to add this craft to the queue."] = "ЛКМ|r для добавления в очередь" -- Needs review
L["Link"] = "Ссылка" -- Needs review
L["Mailing Craft Mats to %s"] = "Отправить материалы для крафта %s" -- Needs review
L["Mail Items"] = "Отправить предметы" -- Needs review
L["Mat Cost"] = "Стоимость материалов" -- Needs review
L["Material Cost Options"] = "Настройки цен материалов"
L["Material Name"] = "Название материала" -- Needs review
L["Materials:"] = "Материалы:" -- Needs review
L["Mat Price"] = "Цена материалов"
L["Max Restock Quantity"] = "Макс. кол-во для добавления в очередь"
L["Minimum Profit"] = "Минимальная прибыль" -- Needs review
L["Min Restock Quantity"] = "Мин. кол-во для добавления в очередь"
L["Name"] = "Название"
L["Need"] = "Требуется"
-- L["Needed Mats at Current Source"] = ""
-- L["Never Queue Inks as Sub-Craftings"] = ""
L["New Operation"] = "Новая операция" -- Needs review
L["<None>"] = "Пусто"
L["No Thanks"] = "Нет спасибо" -- Needs review
L["Nothing To Gather"] = "Нечего собирать" -- Needs review
L["Nothing to Mail"] = "Нечего отправлять" -- Needs review
L["Now select your profession(s)"] = "Сейчас выбраны профессии" -- Needs review
L["Number Owned"] = "Кол-во Имеющихся" -- Needs review
L["Opens the Crafting window to the first profession."] = "Открыть окошко крафта для первой профессии" -- Needs review
L["Operation Name"] = "Название операциии" -- Needs review
L["Operations"] = "Операции" -- Needs review
L["Options"] = "Настройки"
L["Override Default Craft Price Method"] = "Поменять метод стоимости крафта по умолчанию" -- Needs review
L["Percent to subtract from buyout when calculating profits (5% will compensate for AH cut)."] = "Процент, вычитаемый из цены выкупа при вычислении прибыли (5% компенсируют налог аукциона)."
L["Please switch to the Shopping Tab to perform the gathering search."] = "Переключитесь на вкладку Shopping для поиска материалов" -- Needs review
L["Price:"] = "Цена:"
L["Price Settings"] = "Настройки цены"
L["Price Source Filter"] = "Фильтр источника цены" -- Needs review
-- L["Profession data not found for %s on %s. Logging into this player and opening the profression may solve this issue."] = ""
L["Profession Filter"] = "Фильтр профессии" -- Needs review
L["Professions"] = "Профессии" -- Needs review
L["Professions Used In"] = "Используется в профессиях" -- Needs review
L["Profit"] = "Прибыль"
L["Profit Deduction"] = "Вычисление прибыли"
L["Profit (Total Profit):"] = "Прибыль (Всего прибыль):" -- Needs review
L["Queue"] = "Очередь" -- Needs review
L["Relationships"] = "Связи" -- Needs review
L["Reset All Custom Prices to Default"] = "Сбросить все свои цены на цены по умолчанию" -- Needs review
-- L["Reset all Custom Prices to Default Price Source."] = ""
L["Resets the material price for this item to the defualt value."] = "Сбросить цену предмета на стандартную" -- Needs review
L["Reset to Default"] = "Сбросить" -- Needs review
-- L["Restocking to a max of %d (min of %d) with a min profit."] = ""
-- L["Restocking to a max of %d (min of %d) with no min profit."] = ""
-- L["Restock Quantity Settings"] = ""
-- L["Restock Selected Groups"] = ""
-- L["Restock Settings"] = ""
-- L["Right-Click|r to subtract this craft from the queue."] = ""
L["%s Avail"] = "%s Выгода"
L["Search"] = "Поиск" -- Needs review
L["Search for Mats"] = "Поиск материалов" -- Needs review
L["Select Crafter"] = "Выбор персонажа" -- Needs review
-- L["Select one of your characters' professions to browse."] = ""
L["Set Minimum Profit"] = "Установить минимальную прибыль" -- Needs review
L["Shift-Left-Click|r to queue all you can craft."] = "Shift-Left-Click|r для добавления в очередь всех крафтов" -- Needs review
L["Shift-Right-Click|r to remove all from queue."] = "Shift-Right-Click|r для очистки очереди" -- Needs review
L["Show Crafting Cost in Tooltip"] = "Показывать стоимость создания в подсказке"
L["Show Default Profession Frame"] = "Отображать стандартное окно профессии" -- Needs review
L["Show Material Cost in Tooltip"] = "Отображать цену материалов в подсказке" -- Needs review
L["Show Queue >>"] = "Отображать очередь >>" -- Needs review
-- L["'%s' is an invalid operation! Min restock of %d is higher than max restock of %d."] = ""
L["%s (%s profit)"] = "%s (%s прибыль)"
L["Stage %d"] = "Этап %d" -- Needs review
L["Start Gathering"] = "Начать сбор" -- Needs review
L["Stop Gathering"] = "Останвоить сбор" -- Needs review
-- L["This is the default method Crafting will use for determining craft prices."] = ""
L["This is the default method Crafting will use for determining material cost."] = "Для определения стоимости материала будет использован стандартный метод" -- Needs review
L["Total"] = "Всего"
L["TSM Groups"] = "TSM Группы" -- Needs review
L["Vendor"] = "Торговец"
L["Visit Bank"] = "Посетите банк" -- Needs review
L["Visit Guild Bank"] = "Посетите Гильд. Банк" -- Needs review
L["Visit Vendor"] = "Посетите вендора" -- Needs review
L["Warning: The min restock quantity must be lower than the max restock quantity."] = "Внимание! Минимальное кол-во предметов, добавляемых в очередь, должно быть меньше максимального."
L["When you click on the \"Restock Queue\" button enough of each craft will be queued so that you have this maximum number on hand. For example, if you have 2 of item X on hand and you set this to 4, 2 more will be added to the craft queue."] = "При нажатии на кнопку \"Пополнить очередь\" в очередь будет добавлено максимальное количество доступных крафтов. Например, у вас есть 2 крафта Х, а макс. кол-во задано 4, в очередь будет добавлено 2."
L["Would you like to automatically create some TradeSkillMaster groups for this profession?"] = "Хотите автоматически создать группы профессии в TradeSkillMaster?" -- Needs review
L["You can click on one of the rows of the scrolling table below to view or adjust how the price of a material is calculated."] = "Можете клинуть на одну из строк в пролистывающейся таблице ниже, чтобы просмотреть или настроить подсчёт цены для материала."
+155
View File
@@ -0,0 +1,155 @@
-- ------------------------------------------------------------------------------------- --
-- TradeSkillMaster_Crafting - AddOn by Sapu94 --
-- http://wow.curse.com/downloads/wow-addons/details/tradeskillmaster_crafting.aspx --
-- --
-- This addon is licensed under the CC BY-NC-ND 3.0 license as described at the --
-- following url: http://creativecommons.org/licenses/by-nc-nd/3.0/ --
-- Please contact the author via email at sapu94@gmail.com with any questions or --
-- concerns regarding this license. --
-- ------------------------------------------------------------------------------------- --
-- TradeSkillMaster_Crafting Locale - zhCN
-- Please use the localization app on CurseForge to update this
-- http://wow.curseforge.com/addons/TradeSkillMaster_Crafting/localization/
local L = LibStub("AceLocale-3.0"):NewLocale("TradeSkillMaster_Crafting", "zhCN")
if not L then return end
L["All"] = "全部"
L["Are you sure you want to reset all material prices to the default value?"] = "您确定要重置所有材料价格为默认值吗?"
L["Ask Later"] = "稍后询问"
L["Auction House"] = "拍卖行"
L["Available Sources"] = "可用来源"
L["Buy Vendor Items"] = "购买NPC物品"
L["Characters (Bags/Bank/AH/Mail) to Ignore:"] = "角色(包/银行/拍卖行/邮件)忽略:"
L["Clear Filters"] = "清除筛选"
L["Clear Queue"] = "清除队列"
L["Click Start Gathering"] = "开始收集"
L["Collect Mail"] = "搜集邮件"
L["Cost"] = "成本"
L["Could not get link for profession."] = "无法得到专业链接"
L["Crafting Cost"] = "制造成本"
L["Crafting Material Cost"] = "制造原料成本"
L["Crafting operations contain settings for restocking the items in a group. Type the name of the new operation into the box below and hit 'enter' to create a new Crafting operation."] = "Crafting的操作包含分组的补货设置。在下框内输入新操作的名称,点击“确认”来创建一个新的制作操作。"
L["Crafting will not queue any items affected by this operation with a profit below this value. As an example, a min profit of 'max(10g, 10% crafting)' would ensure atleast a 10g and 10% profit."] = "操作不会在队列里添加任何利润低于这个值的物品。比如,最低利润 'max(10g, 10% crafting)' 会保证10g且10%的利润。"
L["Craft Next"] = "制造下一个"
L["Craft Price Method"] = "制造价格设定"
L["Craft Queue"] = "制造队列"
L["Create Profession Groups"] = "创建一个专业分组"
L["Custom Price"] = "自定义价格"
L["Custom Price for this item."] = "这个物品的自定义价格"
L["Custom Price per Item"] = "单件物品的自定义价格"
L["Default Craft Price Method"] = "默认制作价格设定"
L["Default Material Cost Method"] = "默认原料成本设定"
L["Default Price"] = "默认价格"
L["Default Price Settings"] = "默认价格设置"
L["Enchant Vellum"] = "附魔羊皮纸"
L["Error creating operation. Operation with name '%s' already exists."] = "创建操作失败。操作名称 '%s' 已经存在。"
L[ [=[Estimated Cost: %s
Estimated Profit: %s]=] ] = [=[估算成本: %s
估算利润: %s]=]
L["Exclude Crafts with a Cooldown from Craft Cost"] = "从制造成本中排除正在冷却的制造项目"
L["Filters >>"] = "筛选 >>"
L["First select a crafter"] = "首先选择一个制造者"
L["Gather"] = "收集"
L["Gather All Professions by Default if Only One Crafter"] = "如果只有一个制作者将以默认的方式对所有专业收集"
L["Gathering"] = "收集"
L["Gathering Crafting Mats"] = "收集制造原料"
L["Gather Items"] = "收集物品"
L["General"] = "基本设置"
L["General Settings"] = "基本设置"
L["Give the new operation a name. A descriptive name will help you find this operation later."] = "为新操作命名,这个描述性的名称将帮助你在以后方便的找到这个操作"
L["Guilds (Guild Banks) to Ignore:"] = "公会(公会银行)忽略:"
L["Here you can view and adjust how Crafting is calculating the price for this material."] = "你可以在这里查看和调整队列中原料价格的计算方法。"
L["<< Hide Queue"] = "<< 隐藏制造队列"
L["If checked, Crafting will never try and craft inks as intermediate crafts."] = "如果勾选此项,将不会把墨水当作中间产物来制造。"
L["If checked, if there is more than one way to craft the item then the craft cost will exclude any craft with a daily cooldown when calculating the lowest craft cost."] = "如果勾选此项,当计算可以通过多种方法制造出的产品的成本时,会排出需要有一天冷却时间的那种制造方法。"
L["If checked, if there is only one crafter for the craft queue clicking gather will gather for all professions for that crafter"] = "如果勾选此项,如果对于制造队列只有一个制造者,那么点击收集会收集该制造者的所有专业。"
L["If checked, the crafting cost of items will be shown in the tooltip for the item."] = "如果勾选,在提示信息中将会显示该物品的制造成本。"
L["If checked, the material cost of items will be shown in the tooltip for the item."] = "在鼠标提示中显示该物品的制造成本。"
L["If checked, when the TSM_Crafting frame is shown (when you open a profession), the default profession UI will also be shown."] = "如果勾选此项,当你打开一个专业TSM_Crafting界面出现时,系统默认的专业界面也会出现。"
L["Inventory Settings"] = "库存设置"
L["Item Name"] = "物品名称"
L["Items will only be added to the queue if the number being added is greater than this number. This is useful if you don't want to bother with crafting singles for example."] = "如果原数值比添加的数值大,制造项目将只添加到队列。如果你只需要一个特例而不影响其他设置这是个非常有用的设置。"
L["Item Value"] = "物品价值"
L["Left-Click|r to add this craft to the queue."] = "左键点击|r 将该制造添加到队列。"
L["Link"] = "链接"
L["Mailing Craft Mats to %s"] = "邮寄制造原料给 %s"
L["Mail Items"] = "邮寄物品"
L["Mat Cost"] = "原料花费"
L["Material Cost Options"] = "原料成本选项"
L["Material Name"] = "原料名称"
L["Materials:"] = "原料:"
L["Mat Price"] = "原料价格"
L["Max Restock Quantity"] = "最大补货量"
L["Minimum Profit"] = "最低利润"
L["Min Restock Quantity"] = "最小补货量"
L["Name"] = "名称"
L["Need"] = "需要"
L["Needed Mats at Current Source"] = "需要当前来源的原料"
L["Never Queue Inks as Sub-Craftings"] = "不将墨水作为产品添加到队列里"
L["New Operation"] = "新操作"
L["<None>"] = "<无>"
L["No Thanks"] = "不,谢谢"
L["Nothing To Gather"] = "没有物品收集"
L["Nothing to Mail"] = "没有物品邮寄"
L["Now select your profession(s)"] = "现在选择你的专业"
L["Number Owned"] = "拥有数量"
L["Opens the Crafting window to the first profession."] = "打开第一专业的制作窗口"
L["Operation Name"] = "操作名称"
L["Operations"] = "操作"
L["Options"] = "选项"
L["Override Default Craft Price Method"] = "覆盖默认的产品价格模式"
L["Percent to subtract from buyout when calculating profits (5% will compensate for AH cut)."] = "计算利润时从一口价中减去百分之几(拍卖行手续费为5%)。"
L["Please switch to the Shopping Tab to perform the gathering search."] = "请切换到Shopping(购买)标签执行收集搜索。"
L["Price:"] = "价格:"
L["Price Settings"] = "价格设置"
L["Price Source Filter"] = "价格来源筛选器"
L["Profession data not found for %s on %s. Logging into this player and opening the profression may solve this issue."] = "在 %s 上没有发现 %s 的专业数据。登录这个角色打开其专业界面可能解决这个问题。"
L["Profession Filter"] = "专业筛选器"
L["Professions"] = "专业"
L["Professions Used In"] = "涉及专业"
L["Profit"] = "利润"
L["Profit Deduction"] = "利润扣除"
L["Profit (Total Profit):"] = "利润(总利润):"
L["Queue"] = "制造队列"
L["Relationships"] = "关联"
L["Reset All Custom Prices to Default"] = "重置所有自定义价格为默认值"
L["Reset all Custom Prices to Default Price Source."] = "重置所有自定义价格为默认价格来源。"
L["Resets the material price for this item to the defualt value."] = "重置这件物品的原料成本为默认值"
L["Reset to Default"] = "重置为默认"
L["Restocking to a max of %d (min of %d) with a min profit."] = "以最低利润对 %d 进行最大(最小)补货"
L["Restocking to a max of %d (min of %d) with no min profit."] = "以最高利润对 %d 进行最大(最小)补货(?)"
L["Restock Quantity Settings"] = "补货数量设置"
L["Restock Selected Groups"] = "补充所选分组货物"
L["Restock Settings"] = "补货设置"
L["Right-Click|r to subtract this craft from the queue."] = "右键点击|r 从队列中移除该制造"
L["%s Avail"] = "%s 效益"
L["Search"] = "搜索"
L["Search for Mats"] = "搜索原料"
L["Select Crafter"] = "选择制作者"
L["Select one of your characters' professions to browse."] = "浏览角色的一个专业"
L["Set Minimum Profit"] = "设置最低利润"
L["Shift-Left-Click|r to queue all you can craft."] = "Shift+左键|r 添加最大制作数量到队列。"
L["Shift-Right-Click|r to remove all from queue."] = "Shift+右键|r 从队列中移除所有制作。"
L["Show Crafting Cost in Tooltip"] = "提示制造成本"
L["Show Default Profession Frame"] = "显示默认的专业界面"
L["Show Material Cost in Tooltip"] = "在提示中显示成本"
L["Show Queue >>"] = "显示制造队列 >>"
L["'%s' is an invalid operation! Min restock of %d is higher than max restock of %d."] = "'%s'是一个无效的操作! 因为 %d 的最小补货数大于最大补货数。"
L["%s (%s profit)"] = "%s (%s 利润)"
L["Stage %d"] = "阶段 %d"
L["Start Gathering"] = "开始收集"
L["Stop Gathering"] = "收集结束"
L["This is the default method Crafting will use for determining craft prices."] = "这是默认的生产方法,将用于计算成品价格。"
L["This is the default method Crafting will use for determining material cost."] = "这是默认的生产方法,将用于计算原料成本。"
L["Total"] = "总计"
L["TSM Groups"] = "TSM分组"
L["Vendor"] = "NPC"
L["Visit Bank"] = "通过银行"
L["Visit Guild Bank"] = "通过公会银行"
L["Visit Vendor"] = "通过NPC"
L["Warning: The min restock quantity must be lower than the max restock quantity."] = "警告:最低补货量必须小于最大补货量。"
L["When you click on the \"Restock Queue\" button enough of each craft will be queued so that you have this maximum number on hand. For example, if you have 2 of item X on hand and you set this to 4, 2 more will be added to the craft queue."] = "当你点击\"补货队列\"按钮时,只添加最大补货量减去手上拥有量的差。例如,你设置的最大补货为4件,并且手头上有2件,那么只会添加2件的制造任务到制造队列。"
L["Would you like to automatically create some TradeSkillMaster groups for this profession?"] = "您想为该专业自动创建一些TSM分组吗?"
L["You can click on one of the rows of the scrolling table below to view or adjust how the price of a material is calculated."] = "你可以点击下表中的一行来查看或调整材料的价格是怎样计算的。"
+154
View File
@@ -0,0 +1,154 @@
-- ------------------------------------------------------------------------------------- --
-- TradeSkillMaster_Crafting - AddOn by Sapu94 --
-- http://wow.curse.com/downloads/wow-addons/details/tradeskillmaster_crafting.aspx --
-- --
-- This addon is licensed under the CC BY-NC-ND 3.0 license as described at the --
-- following url: http://creativecommons.org/licenses/by-nc-nd/3.0/ --
-- Please contact the author via email at sapu94@gmail.com with any questions or --
-- concerns regarding this license. --
-- ------------------------------------------------------------------------------------- --
-- TradeSkillMaster_Crafting Locale - zhTW
-- Please use the localization app on CurseForge to update this
-- http://wow.curseforge.com/addons/TradeSkillMaster_Crafting/localization/
local L = LibStub("AceLocale-3.0"):NewLocale("TradeSkillMaster_Crafting", "zhTW")
if not L then return end
L["All"] = "全部"
-- L["Are you sure you want to reset all material prices to the default value?"] = ""
-- L["Ask Later"] = ""
L["Auction House"] = "拍賣行"
-- L["Available Sources"] = ""
-- L["Buy Vendor Items"] = ""
-- L["Characters (Bags/Bank/AH/Mail) to Ignore:"] = ""
-- L["Clear Filters"] = ""
L["Clear Queue"] = "清除序列"
-- L["Click Start Gathering"] = ""
-- L["Collect Mail"] = ""
L["Cost"] = "成本"
-- L["Could not get link for profession."] = ""
L["Crafting Cost"] = "製作成本"
-- L["Crafting Material Cost"] = ""
-- L["Crafting operations contain settings for restocking the 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["Crafting will not queue any items affected by this operation with a profit below this value. As an example, a min profit of 'max(10g, 10% crafting)' would ensure atleast a 10g and 10% profit."] = ""
L["Craft Next"] = "製造下一個"
-- L["Craft Price Method"] = ""
-- L["Craft Queue"] = ""
-- L["Create Profession Groups"] = ""
-- L["Custom Price"] = ""
-- L["Custom Price for this item."] = ""
-- L["Custom Price per Item"] = ""
-- L["Default Craft Price Method"] = ""
-- L["Default Material Cost Method"] = ""
-- L["Default Price"] = ""
-- L["Default Price Settings"] = ""
-- L["Enchant Vellum"] = ""
-- L["Error creating operation. Operation with name '%s' already exists."] = ""
--[==[ L[ [=[Estimated Cost: %s
Estimated Profit: %s]=] ] = "" ]==]
-- L["Exclude Crafts with a Cooldown from Craft Cost"] = ""
-- L["Filters >>"] = ""
-- L["First select a crafter"] = ""
-- L["Gather"] = ""
-- L["Gather All Professions by Default if Only One Crafter"] = ""
L["Gathering"] = "採集"
-- L["Gathering Crafting Mats"] = ""
-- L["Gather Items"] = ""
L["General"] = "綜合"
L["General Settings"] = "一般設定"
-- L["Give the new operation a name. A descriptive name will help you find this operation later."] = ""
-- L["Guilds (Guild Banks) to Ignore:"] = ""
L["Here you can view and adjust how Crafting is calculating the price for this material."] = "這裡可以檢視和調整如何計算出製作材料價格。"
-- L["<< Hide Queue"] = ""
-- L["If checked, Crafting will never try and craft inks as intermediate crafts."] = ""
-- L["If checked, if there is more than one way to craft the item then the craft cost will exclude any craft with a daily cooldown when calculating the lowest craft cost."] = ""
-- L["If checked, if there is only one crafter for the craft queue clicking gather will gather for all professions for that crafter"] = ""
L["If checked, the crafting cost of items will be shown in the tooltip for the item."] = "勾選,製作成本將會顯示在提示訊息裡。"
-- L["If checked, the material cost of items will be shown in the tooltip for the item."] = ""
-- L["If checked, when the TSM_Crafting frame is shown (when you open a profession), the default profession UI will also be shown."] = ""
L["Inventory Settings"] = "進貨設定"
L["Item Name"] = "物品名稱"
L["Items will only be added to the queue if the number being added is greater than this number. This is useful if you don't want to bother with crafting singles for example."] = "物品只會新增到序列如果新進的數目比這數目更好。這很有用,例如如果你不想麻煩有單手製作。"
L["Item Value"] = "物品價值"
-- L["Left-Click|r to add this craft to the queue."] = ""
-- L["Link"] = ""
-- L["Mailing Craft Mats to %s"] = ""
-- L["Mail Items"] = ""
-- L["Mat Cost"] = ""
L["Material Cost Options"] = "材料成本設定"
-- L["Material Name"] = ""
-- L["Materials:"] = ""
L["Mat Price"] = "材料價格"
L["Max Restock Quantity"] = "最大進貨數量"
-- L["Minimum Profit"] = ""
L["Min Restock Quantity"] = "最小進貨數量"
L["Name"] = "名稱"
L["Need"] = "需要"
-- L["Needed Mats at Current Source"] = ""
-- L["Never Queue Inks as Sub-Craftings"] = ""
-- L["New Operation"] = ""
L["<None>"] = "<無>"
-- L["No Thanks"] = ""
-- L["Nothing To Gather"] = ""
-- L["Nothing to Mail"] = ""
-- L["Now select your profession(s)"] = ""
L["Number Owned"] = "已擁有數量"
-- L["Opens the Crafting window to the first profession."] = ""
-- L["Operation Name"] = ""
-- L["Operations"] = ""
L["Options"] = "設定"
-- L["Override Default Craft Price Method"] = ""
L["Percent to subtract from buyout when calculating profits (5% will compensate for AH cut)."] = "當計算利潤時從直購價減去百分比(5%是拍賣行稅金)。"
-- L["Please switch to the Shopping Tab to perform the gathering search."] = ""
L["Price:"] = "價格:"
L["Price Settings"] = "價格設定"
-- L["Price Source Filter"] = ""
-- L["Profession data not found for %s on %s. Logging into this player and opening the profression may solve this issue."] = ""
-- L["Profession Filter"] = ""
-- L["Professions"] = ""
-- L["Professions Used In"] = ""
L["Profit"] = "利潤"
L["Profit Deduction"] = "利潤扣除"
-- L["Profit (Total Profit):"] = ""
-- L["Queue"] = ""
-- L["Relationships"] = ""
-- L["Reset All Custom Prices to Default"] = ""
-- L["Reset all Custom Prices to Default Price Source."] = ""
-- L["Resets the material price for this item to the defualt value."] = ""
-- L["Reset to Default"] = ""
-- L["Restocking to a max of %d (min of %d) with a min profit."] = ""
-- L["Restocking to a max of %d (min of %d) with no min profit."] = ""
-- L["Restock Quantity Settings"] = ""
-- L["Restock Selected Groups"] = ""
-- L["Restock Settings"] = ""
-- L["Right-Click|r to subtract this craft from the queue."] = ""
-- L["%s Avail"] = ""
-- L["Search"] = ""
-- L["Search for Mats"] = ""
-- L["Select Crafter"] = ""
-- L["Select one of your characters' professions to browse."] = ""
-- L["Set Minimum Profit"] = ""
-- L["Shift-Left-Click|r to queue all you can craft."] = ""
-- L["Shift-Right-Click|r to remove all from queue."] = ""
L["Show Crafting Cost in Tooltip"] = "在提示顯示製作成本"
-- L["Show Default Profession Frame"] = ""
-- L["Show Material Cost in Tooltip"] = ""
-- L["Show Queue >>"] = ""
-- L["'%s' is an invalid operation! Min restock of %d is higher than max restock of %d."] = ""
-- L["%s (%s profit)"] = ""
-- L["Stage %d"] = ""
-- L["Start Gathering"] = ""
-- L["Stop Gathering"] = ""
-- L["This is the default method Crafting will use for determining craft prices."] = ""
-- L["This is the default method Crafting will use for determining material cost."] = ""
L["Total"] = "總共"
-- L["TSM Groups"] = ""
L["Vendor"] = "商人"
-- L["Visit Bank"] = ""
-- L["Visit Guild Bank"] = ""
-- L["Visit Vendor"] = ""
L["Warning: The min restock quantity must be lower than the max restock quantity."] = "警告:最小進貨數量必須低於最大進貨數量。"
L["When you click on the \"Restock Queue\" button enough of each craft will be queued so that you have this maximum number on hand. For example, if you have 2 of item X on hand and you set this to 4, 2 more will be added to the craft queue."] = "當你點擊\"進貨序列\"按鈕,各個足夠的製造會被序列,以便你有最大手上數量。舉例,如果你有物品X2個並且你設定4,2個就會新增到製造序列。"
-- L["Would you like to automatically create some TradeSkillMaster groups for this profession?"] = ""
L["You can click on one of the rows of the scrolling table below to view or adjust how the price of a material is calculated."] = "你可以在以下表格中點擊一行來檢視或是調整已計算過的材料價格。"
+155
View File
@@ -0,0 +1,155 @@
-- ------------------------------------------------------------------------------ --
-- TradeSkillMaster_Crafting --
-- http://www.curse.com/addons/wow/tradeskillmaster_crafting --
-- --
-- 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 Cost = TSM:NewModule("Cost", "AceEvent-3.0")
local L = LibStub("AceLocale-3.0"):GetLocale("TradeSkillMaster_Crafting") -- loads the localization table
local currentVisited = {}
local cache = { time = 0 }
function Cost:GetMatCost(itemString)
local mat = TSM.db.factionrealm.mats[itemString]
if not mat then return end
if cache.time < (time() - 1) then
cache = {}
cache.time = time()
end
if cache[itemString] then return cache[itemString] end
if currentVisited[itemString] then return end
currentVisited[itemString] = true
local cost = TSM:GetCustomPrice(mat.customValue or TSM.db.global.defaultMatCostMethod, itemString)
currentVisited[itemString] = nil
cache[itemString] = cost
return cost
end
-- gets the value of a crafted item
function Cost:GetCraftValue(itemString)
if type(itemString) == "number" then
-- we got passed a spell
if not TSM.db.factionrealm.crafts[itemString] then return end
itemString = TSM.db.factionrealm.crafts[itemString].itemID
end
if type(itemString) ~= "string" then return end
local operation = TSMAPI:GetItemOperation(itemString, "Crafting")
TSMAPI:UpdateOperation("Crafting", operation and operation[1])
operation = operation and TSM.operations[operation[1]]
local priceMethod = operation and operation.craftPriceMethod or TSM.db.global.defaultCraftPriceMethod
return TSM:GetCustomPrice(priceMethod, itemString)
end
-- gets the cost to create this craft
function Cost:GetCraftCost(itemID)
local spellIDs
if type(itemID) == "string" then
-- we got passed an item
spellIDs = TSM.craftReverseLookup[TSMAPI:GetBaseItemstring(itemID)]
elseif type(itemID) == "number" then
-- we got passed a spell
if TSM.db.factionrealm.crafts[itemID] then
spellIDs = { itemID }
end
end
if not spellIDs or #spellIDs == 0 then return end
local lowestCost
for _, spellID in ipairs(spellIDs) do
local craft = TSM.db.factionrealm.crafts[spellID]
local cost, costIsValid = 0, true
if #spellIDs >= 2 and TSM.db.global.ignoreCDCraftCost and TSM.db.factionrealm.crafts[spellID].hasCD then
costIsValid = false
end
for matID, matQuantity in pairs(craft.mats) do
local MatName = GetItemInfo(matID)
-- if MatName ~= nil and strfind(MatName, "Vellum") then
-- local NewItemString = CheapestVellum(matID)
-- if matID ~= NewItemString then
-- matID = NewItemString
-- end
-- end
local matCost = Cost:GetMatCost(matID)
if not matCost or matCost == 0 then
costIsValid = false
break
end
cost = cost + matQuantity * matCost
end
cost = floor(cost / (craft.numResult) + 0.5) --rounds to nearest gold
if costIsValid then
if not lowestCost or cost < lowestCost then
lowestCost = cost
end
end
end
return lowestCost
end
-- calulates the cost, buyout, and profit for a crafted item
function Cost:GetCraftPrices(itemID)
if not itemID then return end
local cost, buyout, profit
cost = Cost:GetCraftCost(itemID)
buyout = Cost:GetCraftValue(itemID)
if cost and buyout then
profit = floor(buyout - buyout * TSM.db.global.profitPercent - cost + 0.5)
end
return cost, buyout, profit
end
-- gets the spellID, cost, buyout, and profit for the cheapest way to craft the given item
function Cost:GetLowestCraftPrices(itemString, intermediate)
local spellIDs = TSM.craftReverseLookup[itemString]
if not spellIDs then return end
local lowestCost, cheapestSpellID
local soh = "item:76061:0:0:0:0:0:0" -- Spirit of Harmony
for _, spellID in ipairs(spellIDs) do
if TSM.db.factionrealm.crafts[spellID] then
if intermediate and (TSM.db.factionrealm.crafts[spellID].mats[soh] or TSM.db.factionrealm.crafts[spellID].hasCD) then
break
end --exclude spells using SOH or have cooldown from intermediate crafts
local cost = Cost:GetCraftCost(spellID)
if cost and (not lowestCost or cost < lowestCost) then
-- exclude spells with cooldown if option to ignore is enabled or more than one way to craft and not soulbound e.g. BoE
if not TSM.db.global.ignoreCDCraftCost then
if TSM.db.factionrealm.crafts[spellID].hasCD then
if TSMAPI.SOULBOUND_MATS[itemString] or #spellIDs == 1 then
lowestCost = cost
cheapestSpellID = spellID
end
else
lowestCost = cost
cheapestSpellID = spellID
end
elseif not TSM.db.factionrealm.crafts[spellID].hasCD then
lowestCost = cost
cheapestSpellID = spellID
end
end
end
end
if not lowestCost or not cheapestSpellID then return end
local profit, buyout
buyout = Cost:GetCraftValue(itemString)
if buyout then
profit = floor(buyout - buyout * TSM.db.global.profitPercent - lowestCost + 0.5)
end
return cheapestSpellID, lowestCost, buyout, profit
end
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,625 @@
-- ------------------------------------------------------------------------------ --
-- TradeSkillMaster_Crafting --
-- http://www.curse.com/addons/wow/tradeskillmaster_crafting --
-- --
-- A TradeSkillMaster Addon (http://tradeskillmaster.com) --
-- All Rights Reserved* - Detailed license information included with addon. --
-- ------------------------------------------------------------------------------ --
-- load the parent file (TSM) into a local variable
local TSM = select(2, ...)
TSM.enchantingName = GetSpellInfo(7411)
-- looks up the itemID of the scroll that the enchant makes
-- index = spellID of the enchant
-- value = itemID of scroll
-- Enchant List:
-- WRATH
-- [44506] = 38960, -- Enchant Gloves - Gatherer
-- [44484] = 38951, -- Enchant Gloves - Expertise
-- [44488] = 38953, -- Enchant Gloves - Precision
-- [44489] = 38954, -- Enchant Shield - Dodge
-- [44492] = 38955, -- Enchant Chest - Mighty Health
-- [44500] = 38959, -- Enchant Cloak - Superior Agility
-- [44508] = 38961, -- Enchant Boots - Greater Spirit
-- [44509] = 38962, -- Enchant Chest - Greater Mana Restoration
-- [44513] = 38964, -- Enchant Gloves - Greater Assault
-- [44528] = 38966, -- Enchant Boots - Greater Fortitude
-- [44529] = 38967, -- Enchant Gloves - Major Agility
-- [44555] = 38968, -- Enchant Bracer - Exceptional Intellect
-- [44582] = 38973, -- Enchant Cloak - Minor Power
-- [44584] = 38974, -- Enchant Boots - Greater Vitality
-- [44588] = 38975, -- Enchant Chest - Exceptional Resilience
-- [44589] = 38976, -- Enchant Boots - Superior Agility
-- [44591] = 38978, -- Enchant Cloak - Superior Dodge
-- [44592] = 38979, -- Enchant Gloves - Exceptional Spellpower
-- [44593] = 38980, -- Enchant Bracer - Major Spirit
-- [44598] = 38984, -- Enchant Bracer - Expertise
-- [44616] = 38987, -- Enchant Bracer - Greater Stats
-- [44623] = 38989, -- Enchant Chest - Super Stats
-- [44625] = 38990, -- Enchant Gloves - Armsman
-- [44631] = 38993, -- Enchant Cloak - Shadow Armor
-- [44635] = 38997, -- Enchant Bracer - Greater Spellpower
-- [44575] = 44815, -- Enchant Bracer - Greater Assault
-- [44510] = 38963, -- Enchant Weapon - Exceptional Spirit
-- [44524] = 38965, -- Enchant Weapon - Icebreaker
-- [44576] = 38972, -- Enchant Weapon - Lifeward
-- [44595] = 38981, -- Enchant 2H Weapon - Scourgebane
-- [44621] = 38988, -- Enchant Weapon - Giant Slayer
-- [44629] = 38991, -- Enchant Weapon - Exceptional Spellpower
-- [44630] = 38992, -- Enchant 2H Weapon - Greater Savagery
-- [44633] = 38995, -- Enchant Weapon - Exceptional Agility
-- [44383] = 38949, -- Enchant Shield - Resilience
-- [46594] = 38999, -- Enchant Chest - Dodge
-- [46578] = 38998, -- Enchant Weapon - Deathfrost
-- [47051] = 39000, -- Enchant Cloak - Greater Dodge
-- [47672] = 39001, -- Enchant Cloak - Mighty Stamina
-- [47766] = 39002, -- Enchant Chest - Greater Dodge
-- [47898] = 39003, -- Enchant Cloak - Greater Speed
-- [47899] = 39004, -- Enchant Cloak - Wisdom
-- [47900] = 39005, -- Enchant Chest - Super Health
-- [47901] = 39006, -- Enchant Boots - Tuskarr's Vitality
-- [59625] = 43987, -- Enchant Weapon - Black Magic
-- [59621] = 44493, -- Enchant Weapon - Berserking
-- [59619] = 44497, -- Enchant Weapon - Accuracy
-- [60616] = 38971, -- Enchant Bracer - Assault
-- [60623] = 38986, -- Enchant Boots - Icewalker
-- [60606] = 44449, -- Enchant Boots - Assault
-- [60609] = 44456, -- Enchant Cloak - Speed
-- [60663] = 44457, -- Enchant Cloak - Major Agility
-- [60668] = 44458, -- Enchant Gloves - Crusher
-- [60692] = 44465, -- Enchant Chest - Powerful Stats
-- [60763] = 44469, -- Enchant Boots - Greater Assault
-- [60767] = 44470, -- Enchant Bracer - Superior Spellpower
-- [60621] = 44453, -- Enchant Weapon - Greater Potency
-- [60691] = 44463, -- Enchant 2H Weapon - Massacre
-- [60707] = 44466, -- Enchant Weapon - Superior Potency
-- [60714] = 44467, -- Enchant Weapon - Mighty Spellpower
-- [62256] = 44947, -- Enchant Bracer - Major Stamina
-- [62948] = 45056, -- Enchant Staff - Greater Spellpower
-- [62959] = 45060, -- Enchant Staff - Spellpower
-- [63746] = 45628, -- Enchant Boots - Lesser Accuracy
-- [64441] = 46026, -- Enchant Weapon - Blade Ward
-- [64579] = 46098, -- Enchant Weapon - Blood Draining
-- [71692] = 50816, -- Enchant Gloves - Angler
-- TBC
-- [33990] = 38928, -- Enchant Chest - Major Spirit
-- [33991] = 38929, -- Enchant Chest - Restore Mana Prime
-- [33992] = 38930, -- Enchant Chest - Major Resilience
-- [33993] = 38931, -- Enchant Gloves - Blasting
-- [33994] = 38932, -- Enchant Gloves - Precise Strikes
-- [33995] = 38933, -- Enchant Gloves - Major Strength
-- [33996] = 38934, -- Enchant Gloves - Assault
-- [33997] = 38935, -- Enchant Gloves - Major Spellpower
-- [33999] = 38936, -- Enchant Gloves - Major Healing
-- [34001] = 38937, -- Enchant Bracer - Major Intellect
-- [34002] = 38938, -- Enchant Bracer - Lesser Assault
-- [34003] = 38939, -- Enchant Cloak - Spell Penetration
-- [34004] = 38940, -- Enchant Cloak - Greater Agility
-- [34007] = 38943, -- Enchant Boots - Cat's Swiftness
-- [34008] = 38944, -- Enchant Boots - Boar's Speed
-- [34009] = 38945, -- Enchant Shield - Major Stamina
-- [34010] = 38946, -- Enchant Weapon - Major Healing
-- [42974] = 38948, -- Enchant Weapon - Executioner
-- [42620] = 38947, -- Enchant Weapon - Greater Agility
-- VANILLA
-- [7745] = 38772, -- Enchant 2H Weapon - Minor Impact
-- [7786] = 38779, -- Enchant Weapon - Minor Beastslayer
-- [7788] = 38780, -- Enchant Weapon - Minor Striking
-- [7793] = 38781, -- Enchant 2H Weapon - Lesser Intellect
-- [7418] = 38679, -- Enchant Bracer - Minor Health
-- [7420] = 38766, -- Enchant Chest - Minor Health
-- [7426] = 38767, -- Enchant Chest - Minor Absorption
-- [7428] = 38768, -- Enchant Bracer - Minor Dodge
-- [7443] = 38769, -- Enchant Chest - Minor Mana
-- [7457] = 38771, -- Enchant Bracer - Minor Stamina
-- [7748] = 38773, -- Enchant Chest - Lesser Health
-- [7766] = 38774, -- Enchant Bracer - Minor Spirit
-- [7771] = 38775, -- Enchant Cloak - Minor Protection
-- [7776] = 38776, -- Enchant Chest - Lesser Mana
-- [7779] = 38777, -- Enchant Bracer - Minor Agility
-- [7782] = 38778, -- Enchant Bracer - Minor Strength
-- [7857] = 38782, -- Enchant Chest - Health
-- [7859] = 38783, -- Enchant Bracer - Lesser Spirit
-- [7863] = 38785, -- Enchant Boots - Minor Stamina
-- [7867] = 38786, -- Enchant Boots - Minor Agility
-- [13378] = 38787, -- Enchant Shield - Minor Stamina
-- [13419] = 38789, -- Enchant Cloak - Minor Agility
-- [13421] = 38790, -- Enchant Cloak - Lesser Protection
-- [13464] = 38791, -- Enchant Shield - Lesser Protection
-- [13485] = 38792, -- Enchant Shield - Lesser Spirit
-- [13501] = 38793, -- Enchant Bracer - Lesser Stamina
-- [13536] = 38797, -- Enchant Bracer - Lesser Strength
-- [13538] = 38798, -- Enchant Chest - Lesser Absorption
-- [13607] = 38799, -- Enchant Chest - Mana
-- [13612] = 38800, -- Enchant Gloves - Mining
-- [13617] = 38801, -- Enchant Gloves - Herbalism
-- [13620] = 38802, -- Enchant Gloves - Fishing
-- [13622] = 38803, -- Enchant Bracer - Lesser Intellect
-- [13626] = 38804, -- Enchant Chest - Minor Stats
-- [13631] = 38805, -- Enchant Shield - Lesser Stamina
-- [13635] = 38806, -- Enchant Cloak - Defense
-- [13637] = 38807, -- Enchant Boots - Lesser Agility
-- [13640] = 38808, -- Enchant Chest - Greater Health
-- [13642] = 38809, -- Enchant Bracer - Spirit
-- [13644] = 38810, -- Enchant Boots - Lesser Stamina
-- [13646] = 38811, -- Enchant Bracer - Lesser Dodge
-- [13648] = 38812, -- Enchant Bracer - Stamina
-- [13659] = 38816, -- Enchant Shield - Spirit
-- [13661] = 38817, -- Enchant Bracer - Strength
-- [13663] = 38818, -- Enchant Chest - Greater Mana
-- [13687] = 38819, -- Enchant Boots - Lesser Spirit
-- [13689] = 38820, -- Enchant Shield - Lesser Parry
-- [13698] = 38823, -- Enchant Gloves - Skinning
-- [13700] = 38824, -- Enchant Chest - Lesser Stats
-- [13746] = 38825, -- Enchant Cloak - Greater Defense
-- [13815] = 38827, -- Enchant Gloves - Agility
-- [13817] = 38828, -- Enchant Shield - Stamina
-- [13822] = 38829, -- Enchant Bracer - Intellect
-- [13836] = 38830, -- Enchant Boots - Stamina
-- [13841] = 38831, -- Enchant Gloves - Advanced Mining
-- [13846] = 38832, -- Enchant Bracer - Greater Spirit
-- [13858] = 38833, -- Enchant Chest - Superior Health
-- [13868] = 38834, -- Enchant Gloves - Advanced Herbalism
-- [13882] = 38835, -- Enchant Cloak - Lesser Agility
-- [13887] = 38836, -- Enchant Gloves - Strength
-- [13890] = 38837, -- Enchant Boots - Minor Speed
-- [13905] = 38839, -- Enchant Shield - Greater Spirit
-- [13917] = 38841, -- Enchant Chest - Superior Mana
-- [13931] = 38842, -- Enchant Bracer - Dodge
-- [13935] = 38844, -- Enchant Boots - Agility
-- [13939] = 38846, -- Enchant Bracer - Greater Strength
-- [13941] = 38847, -- Enchant Chest - Stats
-- [13945] = 38849, -- Enchant Bracer - Greater Stamina
-- [13947] = 38850, -- Enchant Gloves - Riding Skill
-- [13948] = 38851, -- Enchant Gloves - Minor Haste
-- [13380] = 38788, -- Enchant 2H Weapon - Lesser Spirit
-- [13503] = 38794, -- Enchant Weapon - Lesser Striking
-- [13529] = 38796, -- Enchant 2H Weapon - Lesser Impact
-- [13653] = 38813, -- Enchant Weapon - Lesser Beastslayer
-- [13655] = 38814, -- Enchant Weapon - Lesser Elemental Slayer
-- [13693] = 38821, -- Enchant Weapon - Striking
-- [13695] = 38822, -- Enchant 2H Weapon - Impact
-- [13898] = 38838, -- Enchant Weapon - Fiery Weapon
-- [13915] = 38840, -- Enchant Weapon - Demonslaying
-- [13937] = 38845, -- Enchant 2H Weapon - Greater Impact
-- [13943] = 38848, -- Enchant Weapon - Greater Striking
-- [20008] = 38852, -- Enchant Bracer - Greater Intellect
-- [20009] = 38853, -- Enchant Bracer - Superior Spirit
-- [20010] = 38854, -- Enchant Bracer - Superior Strength
-- [20011] = 38855, -- Enchant Bracer - Superior Stamina
-- [20012] = 38856, -- Enchant Gloves - Greater Agility
-- [20013] = 38857, -- Enchant Gloves - Greater Strength
-- [20015] = 38859, -- Enchant Cloak - Superior Defense
-- [20016] = 38860, -- Enchant Shield - Vitality
-- [20017] = 38861, -- Enchant Shield - Greater Stamina
-- [20020] = 38862, -- Enchant Boots - Greater Stamina
-- [20023] = 38863, -- Enchant Boots - Greater Agility
-- [20024] = 38864, -- Enchant Boots - Spirit
-- [20025] = 38865, -- Enchant Chest - Greater Stats
-- [20026] = 38866, -- Enchant Chest - Major Health
-- [20028] = 38867, -- Enchant Chest - Major Mana
-- [20029] = 38868, -- Enchant Weapon - Icy Chill
-- [20030] = 38869, -- Enchant 2H Weapon - Superior Impact
-- [20031] = 38870, -- Enchant Weapon - Superior Striking
-- [20032] = 38871, -- Enchant Weapon - Lifestealing
-- [20033] = 38872, -- Enchant Weapon - Unholy Weapon
-- [20034] = 38873, -- Enchant Weapon - Crusader
-- [20035] = 38874, -- Enchant 2H Weapon - Major Spirit
-- [20036] = 38875, -- Enchant 2H Weapon - Major Intellect
-- [21931] = 38876, -- Enchant Weapon - Winter's Might
-- [22749] = 38877, -- Enchant Weapon - Spellpower
-- [22750] = 38878, -- Enchant Weapon - Healing Power
-- [23799] = 38879, -- Enchant Weapon - Strength
-- [23800] = 38880, -- Enchant Weapon - Agility
-- [23803] = 38883, -- Enchant Weapon - Mighty Spirit
-- [23804] = 38884, -- Enchant Weapon - Mighty Intellect
-- [23801] = 38881, -- Enchant Bracer - Mana Regeneration
-- [23802] = 38882, -- Enchant Bracer - Healing Power
-- [25072] = 38885, -- Enchant Gloves - Threat
-- [25073] = 38886, -- Enchant Gloves - Shadow Power
-- [25074] = 38887, -- Enchant Gloves - Frost Power
-- [25078] = 38888, -- Enchant Gloves - Fire Power
-- [25079] = 38889, -- Enchant Gloves - Healing Power
-- [25080] = 38890, -- Enchant Gloves - Superior Agility
-- [25083] = 38893, -- Enchant Cloak - Stealth
-- [25084] = 38894, -- Enchant Cloak - Subtlety
-- [25086] = 38895, -- Enchant Cloak - Dodge
-- [27837] = 38896, -- Enchant 2H Weapon - Agility
-- [27951] = 37603, -- Enchant Boots - Dexterity
-- [27958] = 38912, -- Enchant Chest - Exceptional Mana
-- [27899] = 38897, -- Enchant Bracer - Brawn
-- [27905] = 38898, -- Enchant Bracer - Stats
-- [27906] = 38899, -- Enchant Bracer - Greater Dodge
-- [27911] = 38900, -- Enchant Bracer - Superior Healing
-- [27913] = 38901, -- Enchant Bracer - Restore Mana Prime
-- [27914] = 38902, -- Enchant Bracer - Fortitude
-- [27917] = 38903, -- Enchant Bracer - Spellpower
-- [27944] = 38904, -- Enchant Shield - Lesser Dodge
-- [27945] = 38905, -- Enchant Shield - Intellect
-- [27946] = 38906, -- Enchant Shield - Parry
-- [27948] = 38908, -- Enchant Boots - Vitality
-- [27950] = 38909, -- Enchant Boots - Fortitude
-- [27954] = 38910, -- Enchant Boots - Surefooted
-- [27957] = 38911, -- Enchant Chest - Exceptional Health
-- [27960] = 38913, -- Enchant Chest - Exceptional Stats
-- [27961] = 38914, -- Enchant Cloak - Major Armor
-- [27967] = 38917, -- Enchant Weapon - Major Striking
-- [27968] = 38918, -- Enchant Weapon - Major Intellect
-- [27971] = 38919, -- Enchant 2H Weapon - Savagery
-- [27972] = 38920, -- Enchant Weapon - Potency
-- [27975] = 38921, -- Enchant Weapon - Major Spellpower
-- [27977] = 38922, -- Enchant 2H Weapon - Major Agility
-- [27981] = 38923, -- Enchant Weapon - Sunfire
-- [27982] = 38924, -- Enchant Weapon - Soulfrost
-- [27984] = 38925, -- Enchant Weapon - Mongoose
-- [28003] = 38926, -- Enchant Weapon - Spellsurge
-- [28004] = 38927, -- Enchant Weapon - Battlemaster
-- High Risk Ascension Content
-- [968676] = 967760, -- Enchant Weapon - Unstoppable Assault I
-- [968677] = 967761, -- Enchant Weapon - Unstoppable Assault II
-- [968678] = 967762, -- Enchant Weapon - Unstoppable Assault III
-- [968679] = 967763, -- Enchant Weapon - Lucid Assault I
-- [968680] = 967764, -- Enchant Weapon - Lucid Assault II
-- [968681] = 967765, -- Enchant Weapon - Lucid Assault III
-- [968682] = 967766, -- Enchant Weapon - Spellbinder's Rage I
-- [968683] = 967767, -- Enchant Weapon - Spellbinder's Rage II
-- [968684] = 967768, -- Enchant Weapon - Spellbinder's Rage III
-- [968685] = 967769, -- Enchant Weapon - Ninja's Focus I
-- [968686] = 967770, -- Enchant Weapon - Ninja's Focus II
-- [968687] = 967771, -- Enchant Weapon - Ninja's Focus III
-- [968688] = 967772, -- Enchant Weapon - Grovewarden's Blessing I
-- [968689] = 967773, -- Enchant Weapon - Grovewarden's Blessing II
-- [968690] = 967774, -- Enchant Weapon - Grovewarden's Blessing III
-- [968691] = 967775, -- Enchant Weapon - Viscious Assault I
-- [968692] = 967776, -- Enchant Weapon - Viscious Assault II
-- [968693] = 967777, -- Enchant Weapon - Viscious Assault III
-- [968694] = 967778, -- Enchant Weapon - Arcane Dexterity I
-- [968695] = 967779, -- Enchant Weapon - Arcane Dexterity II
-- [968696] = 967780, -- Enchant Weapon - Arcane Dexterity III
-- [968697] = 967781, -- Enchant Weapon - Arcane Artillery I
-- [968698] = 967782, -- Enchant Weapon - Arcane Artillery II
-- [968699] = 967783, -- Enchant Weapon - Arcane Artillery III
-- [968700] = 967784, -- Enchant Weapon - Arcane Precision I
-- [968701] = 967785, -- Enchant Weapon - Arcane Precision II
-- [968702] = 967786, -- Enchant Weapon - Arcane Precision III
-- [968770] = 967787, -- Enchant Weapon - Crusader II
-- [968771] = 967788, -- Enchant Weapon - Crusader III
-- [1968677] = 1204125, -- Enchant Weapon - Void Assault
-- [1968678] = 1204126, -- Enchant Weapon - Overpowering Void Assault
-- [1968680] = 1204127, -- Enchant Weapon - Dread Assault
-- [1968681] = 1204128, -- Enchant Weapon - Overpowering Dread Assault
-- [1968683] = 1204129, -- Enchant Weapon - Twisted Evoker
-- [1968684] = 1204130, -- Enchant Weapon - Overpowering Twisted Evoker
-- [1968686] = 1204131, -- Enchant Weapon - Twisted Assault
-- [1968687] = 1204132, -- Enchant Weapon - Overpowering Twisted Assault
-- [1968689] = 1204133, -- Enchant Weapon - Twisted Channeler
-- [1968690] = 1204134, -- Enchant Weapon - Overpowering Twisted Channeler
-- [1968692] = 1204135, -- Enchant Weapon - Dread Omen Strikes
-- [1968693] = 1204136, -- Enchant Weapon - Overpowering Dread Omen Strikes
-- [1968695] = 1204137, -- Enchant Weapon - Void Flows
-- [1968696] = 1204138, -- Enchant Weapon - Overpowering Void Flows
-- [1968698] = 1204139, -- Enchant Weapon - Void Blasting
-- [1968699] = 1204140, -- Enchant Weapon - Overpowering Void Blasting
-- [1968701] = 1204141, -- Enchant Weapon - Dread Precision
-- [1968702] = 1204142, -- Enchant Weapon - Overpowering Dread Precision
-- [1968770] = 1204143, -- Enchant Weapon - Twisted Crusader
-- [1968771] = 1204144, -- Enchant Weapon - Overpowering Twisted Crusader
--
TSM.enchantingItemIDs = {
[7418] = 38679, -- Scroll of Enchant Bracer - Minor Health
[7420] = 38766, -- Scroll of Enchant Chest - Minor Health
[7426] = 38767, -- Scroll of Enchant Chest - Minor Absorption
[7428] = 38768, -- Scroll of Enchant Bracer - Minor Deflection
[7443] = 38769, -- Scroll of Enchant Chest - Minor Mana
[7454] = 38770, -- Scroll of Enchant Cloak - Minor Resistance
[7457] = 38771, -- Scroll of Enchant Bracer - Minor Stamina
[7745] = 38772, -- Scroll of Enchant 2H Weapon - Minor Impact
[7748] = 38773, -- Scroll of Enchant Chest - Lesser Health
[7766] = 38774, -- Scroll of Enchant Bracer - Minor Spirit
[7771] = 38775, -- Scroll of Enchant Cloak - Minor Protection
[7776] = 38776, -- Scroll of Enchant Chest - Lesser Mana
[7779] = 38777, -- Scroll of Enchant Bracer - Minor Agility
[7782] = 38778, -- Scroll of Enchant Bracer - Minor Strength
[7786] = 38779, -- Scroll of Enchant Weapon - Minor Beastslayer
[7788] = 38780, -- Scroll of Enchant Weapon - Minor Striking
[7793] = 38781, -- Scroll of Enchant 2H Weapon - Lesser Intellect
[7857] = 38782, -- Scroll of Enchant Chest - Health
[7859] = 38783, -- Scroll of Enchant Bracer - Lesser Spirit
[7861] = 38784, -- Scroll of Enchant Cloak - Lesser Fire Resistance
[7863] = 38785, -- Scroll of Enchant Boots - Minor Stamina
[7867] = 38786, -- Scroll of Enchant Boots - Minor Agility
[13378] = 38787, -- Scroll of Enchant Shield - Minor Stamina
[13380] = 38788, -- Scroll of Enchant 2H Weapon - Lesser Spirit
[13419] = 38789, -- Scroll of Enchant Cloak - Minor Agility
[13421] = 38790, -- Scroll of Enchant Cloak - Lesser Protection
[13464] = 38791, -- Scroll of Enchant Shield - Lesser Protection
[13485] = 38792, -- Scroll of Enchant Shield - Lesser Spirit
[13501] = 38793, -- Scroll of Enchant Bracer - Lesser Stamina
[13503] = 38794, -- Scroll of Enchant Weapon - Lesser Striking
[13522] = 38795, -- Scroll of Enchant Cloak - Lesser Shadow Resistance
[13529] = 38796, -- Scroll of Enchant 2H Weapon - Lesser Impact
[13536] = 38797, -- Scroll of Enchant Bracer - Lesser Strength
[13538] = 38798, -- Scroll of Enchant Chest - Lesser Absorption
[13607] = 38799, -- Scroll of Enchant Chest - Mana
[13612] = 38800, -- Scroll of Enchant Gloves - Mining
[13617] = 38801, -- Scroll of Enchant Gloves - Herbalism
[13620] = 38802, -- Scroll of Enchant Gloves - Fishing
[13622] = 38803, -- Scroll of Enchant Bracer - Lesser Intellect
[13626] = 38804, -- Scroll of Enchant Chest - Minor Stats
[13631] = 38805, -- Scroll of Enchant Shield - Lesser Stamina
[13635] = 38806, -- Scroll of Enchant Cloak - Defense
[13637] = 38807, -- Scroll of Enchant Boots - Lesser Agility
[13640] = 38808, -- Scroll of Enchant Chest - Greater Health
[13642] = 38809, -- Scroll of Enchant Bracer - Spirit
[13644] = 38810, -- Scroll of Enchant Boots - Lesser Stamina
[13646] = 38811, -- Scroll of Enchant Bracer - Lesser Deflection
[13648] = 38812, -- Scroll of Enchant Bracer - Stamina
[13653] = 38813, -- Scroll of Enchant Weapon - Lesser Beastslayer
[13655] = 38814, -- Scroll of Enchant Weapon - Lesser Elemental Slayer
[13657] = 38815, -- Scroll of Enchant Cloak - Fire Resistance
[13659] = 38816, -- Scroll of Enchant Shield - Spirit
[13661] = 38817, -- Scroll of Enchant Bracer - Strength
[13663] = 38818, -- Scroll of Enchant Chest - Greater Mana
[13687] = 38819, -- Scroll of Enchant Boots - Lesser Spirit
[13689] = 38820, -- Scroll of Enchant Shield - Lesser Block
[13693] = 38821, -- Scroll of Enchant Weapon - Striking
[13695] = 38822, -- Scroll of Enchant 2H Weapon - Impact
[13698] = 38823, -- Scroll of Enchant Gloves - Skinning
[13700] = 38824, -- Scroll of Enchant Chest - Lesser Stats
[13746] = 38825, -- Scroll of Enchant Cloak - Greater Defense
[13794] = 38826, -- Scroll of Enchant Cloak - Resistance
[13815] = 38827, -- Scroll of Enchant Gloves - Agility
[13817] = 38828, -- Scroll of Enchant Shield - Stamina
[13822] = 38829, -- Scroll of Enchant Bracer - Intellect
[13836] = 38830, -- Scroll of Enchant Boots - Stamina
[13841] = 38831, -- Scroll of Enchant Gloves - Advanced Mining
[13846] = 38832, -- Scroll of Enchant Bracer - Greater Spirit
[13858] = 38833, -- Scroll of Enchant Chest - Superior Health
[13868] = 38834, -- Scroll of Enchant Gloves - Advanced Herbalism
[13882] = 38835, -- Scroll of Enchant Cloak - Lesser Agility
[13887] = 38836, -- Scroll of Enchant Gloves - Strength
[13890] = 38837, -- Scroll of Enchant Boots - Minor Speed
[13898] = 38838, -- Scroll of Enchant Weapon - Fiery Weapon
[13905] = 38839, -- Scroll of Enchant Shield - Greater Spirit
[13915] = 38840, -- Scroll of Enchant Weapon - Demonslaying
[13917] = 38841, -- Scroll of Enchant Chest - Superior Mana
[13931] = 38842, -- Scroll of Enchant Bracer - Deflection
[13933] = 38843, -- Scroll of Enchant Shield - Frost Resistance
[13935] = 38844, -- Scroll of Enchant Boots - Agility
[13937] = 38845, -- Scroll of Enchant 2H Weapon - Greater Impact
[13939] = 38846, -- Scroll of Enchant Bracer - Greater Strength
[13941] = 38847, -- Scroll of Enchant Chest - Stats
[13943] = 38848, -- Scroll of Enchant Weapon - Greater Striking
[13945] = 38849, -- Scroll of Enchant Bracer - Greater Stamina
[13947] = 38850, -- Scroll of Enchant Gloves - Riding Skill
[13948] = 38851, -- Scroll of Enchant Gloves - Minor Haste
[20008] = 38852, -- Scroll of Enchant Bracer - Greater Intellect
[20009] = 38853, -- Scroll of Enchant Bracer - Superior Spirit
[20010] = 38854, -- Scroll of Enchant Bracer - Superior Strength
[20011] = 38855, -- Scroll of Enchant Bracer - Superior Stamina
[20012] = 38856, -- Scroll of Enchant Gloves - Greater Agility
[20013] = 38857, -- Scroll of Enchant Gloves - Greater Strength
[20014] = 38858, -- Scroll of Enchant Cloak - Greater Resistance
[20015] = 38859, -- Scroll of Enchant Cloak - Superior Defense
[20016] = 38860, -- Scroll of Enchant Shield - Vitality
[20017] = 38861, -- Scroll of Enchant Shield - Greater Stamina
[20020] = 38862, -- Scroll of Enchant Boots - Greater Stamina
[20023] = 38863, -- Scroll of Enchant Boots - Greater Agility
[20024] = 38864, -- Scroll of Enchant Boots - Spirit
[20025] = 38865, -- Scroll of Enchant Chest - Greater Stats
[20026] = 38866, -- Scroll of Enchant Chest - Major Health
[20028] = 38867, -- Scroll of Enchant Chest - Major Mana
[20029] = 38868, -- Scroll of Enchant Weapon - Icy Chill
[20030] = 38869, -- Scroll of Enchant 2H Weapon - Superior Impact
[20031] = 38870, -- Scroll of Enchant Weapon - Superior Striking
[20032] = 38871, -- Scroll of Enchant Weapon - Lifestealing
[20033] = 38872, -- Scroll of Enchant Weapon - Unholy Weapon
[20034] = 38873, -- Scroll of Enchant Weapon - Crusader
[20035] = 38874, -- Scroll of Enchant 2H Weapon - Major Spirit
[20036] = 38875, -- Scroll of Enchant 2H Weapon - Major Intellect
[21931] = 38876, -- Scroll of Enchant Weapon - Winter's Might
[22749] = 38877, -- Scroll of Enchant Weapon - Spellpower
[22750] = 38878, -- Scroll of Enchant Weapon - Healing Power
[23799] = 38879, -- Scroll of Enchant Weapon - Strength
[23800] = 38880, -- Scroll of Enchant Weapon - Agility
[23801] = 38881, -- Scroll of Enchant Bracer - Mana Regeneration
[23802] = 38882, -- Scroll of Enchant Bracer - Healing Power
[23803] = 38883, -- Scroll of Enchant Weapon - Mighty Spirit
[23804] = 38884, -- Scroll of Enchant Weapon - Mighty Intellect
[25072] = 38885, -- Scroll of Enchant Gloves - Threat
[25073] = 38886, -- Scroll of Enchant Gloves - Shadow Power
[25074] = 38887, -- Scroll of Enchant Gloves - Frost Power
[25078] = 38888, -- Scroll of Enchant Gloves - Fire Power
[25079] = 38889, -- Scroll of Enchant Gloves - Healing Power
[25080] = 38890, -- Scroll of Enchant Gloves - Superior Agility
[25081] = 38891, -- Scroll of Enchant Cloak - Greater Fire Resistance
[25082] = 38892, -- Scroll of Enchant Cloak - Greater Nature Resistance
[25083] = 38893, -- Scroll of Enchant Cloak - Stealth
[25084] = 38894, -- Scroll of Enchant Cloak - Subtlety
[25086] = 38895, -- Scroll of Enchant Cloak - Dodge
[27837] = 38896, -- Scroll of Enchant 2H Weapon - Agility
[27899] = 38897, -- Scroll of Enchant Bracer - Brawn
[27905] = 38898, -- Scroll of Enchant Bracer - Stats
[27906] = 38899, -- Scroll of Enchant Bracer - Major Defense
[27911] = 38900, -- Scroll of Enchant Bracer - Superior Healing
[27913] = 38901, -- Scroll of Enchant Bracer - Restore Mana Prime
[27914] = 38902, -- Scroll of Enchant Bracer - Fortitude
[27917] = 38903, -- Scroll of Enchant Bracer - Spellpower
[27944] = 38904, -- Scroll of Enchant Shield - Tough Shield
[27945] = 38905, -- Scroll of Enchant Shield - Intellect
[27946] = 38906, -- Scroll of Enchant Shield - Shield Block
[27947] = 38907, -- Scroll of Enchant Shield - Resistance
[27948] = 38908, -- Scroll of Enchant Boots - Vitality
[27950] = 38909, -- Scroll of Enchant Boots - Fortitude
[27951] = 37603, -- Scroll of Enchant Boots - Dexterity
[27954] = 38910, -- Scroll of Enchant Boots - Surefooted
[27957] = 38911, -- Scroll of Enchant Chest - Exceptional Health
[27958] = 38912, -- Scroll of Enchant Chest - Exceptional Mana
[27960] = 38913, -- Scroll of Enchant Chest - Exceptional Stats
[27961] = 38914, -- Scroll of Enchant Cloak - Major Armor
[27962] = 38915, -- Scroll of Enchant Cloak - Major Resistance
[27967] = 38917, -- Scroll of Enchant Weapon - Major Striking
[27968] = 38918, -- Scroll of Enchant Weapon - Major Intellect
[27971] = 38919, -- Scroll of Enchant 2H Weapon - Savagery
[27972] = 38920, -- Scroll of Enchant Weapon - Potency
[27975] = 38921, -- Scroll of Enchant Weapon - Major Spellpower
[27977] = 38922, -- Scroll of Enchant 2H Weapon - Major Agility
[27981] = 38923, -- Scroll of Enchant Weapon - Sunfire
[27982] = 38924, -- Scroll of Enchant Weapon - Soulfrost
[27984] = 38925, -- Scroll of Enchant Weapon - Mongoose
[28003] = 38926, -- Scroll of Enchant Weapon - Spellsurge
[28004] = 38927, -- Scroll of Enchant Weapon - Battlemaster
[33990] = 38928, -- Scroll of Enchant Chest - Major Spirit
[33991] = 38929, -- Scroll of Enchant Chest - Restore Mana Prime
[33992] = 38930, -- Scroll of Enchant Chest - Major Resilience
[33993] = 38931, -- Scroll of Enchant Gloves - Blasting
[33994] = 38932, -- Scroll of Enchant Gloves - Precise Strikes
[33995] = 38933, -- Scroll of Enchant Gloves - Major Strength
[33996] = 38934, -- Scroll of Enchant Gloves - Assault
[33997] = 38935, -- Scroll of Enchant Gloves - Major Spellpower
[33999] = 38936, -- Scroll of Enchant Gloves - Major Healing
[34001] = 38937, -- Scroll of Enchant Bracer - Major Intellect
[34002] = 38938, -- Scroll of Enchant Bracer - Assault
[34003] = 38939, -- Scroll of Enchant Cloak - Spell Penetration
[34004] = 38940, -- Scroll of Enchant Cloak - Greater Agility
[34005] = 38941, -- Scroll of Enchant Cloak - Greater Arcane Resistance
[34006] = 38942, -- Scroll of Enchant Cloak - Greater Shadow Resistance
[34007] = 38943, -- Scroll of Enchant Boots - Cat's Swiftness
[34008] = 38944, -- Scroll of Enchant Boots - Boar's Speed
[34009] = 38945, -- Scroll of Enchant Shield - Major Stamina
[34010] = 38946, -- Scroll of Enchant Weapon - Major Healing
[42620] = 38947, -- Scroll of Enchant Weapon - Greater Agility
[42974] = 38948, -- Scroll of Enchant Weapon - Executioner
[44383] = 38949, -- Scroll of Enchant Shield - Resilience
[44483] = 38950, -- Scroll of Enchant Cloak - Superior Frost Resistance
[44484] = 38951, -- Scroll of Enchant Gloves - Expertise
[44488] = 38953, -- Scroll of Enchant Gloves - Precision
[44489] = 38954, -- Scroll of Enchant Shield - Defense
[44492] = 38955, -- Scroll of Enchant Chest - Mighty Health
[44494] = 38956, -- Scroll of Enchant Cloak - Superior Nature Resistance
[44500] = 38959, -- Scroll of Enchant Cloak - Superior Agility
[44506] = 38960, -- Scroll of Enchant Gloves - Gatherer
[44508] = 38961, -- Scroll of Enchant Boots - Greater Spirit
[44509] = 38962, -- Scroll of Enchant Chest - Greater Mana Restoration
[44510] = 38963, -- Scroll of Enchant Weapon - Exceptional Spirit
[44513] = 38964, -- Scroll of Enchant Gloves - Greater Assault
[44524] = 38965, -- Scroll of Enchant Weapon - Icebreaker
[44528] = 38966, -- Scroll of Enchant Boots - Greater Fortitude
[44529] = 38967, -- Scroll of Enchant Gloves - Major Agility
[44555] = 38968, -- Scroll of Enchant Bracers - Exceptional Intellect
[44556] = 38969, -- Scroll of Enchant Cloak - Superior Fire Resistance
[44575] = 44815, -- Scroll of Enchant Bracers - Greater Assault
[44576] = 38972, -- Scroll of Enchant Weapon - Lifeward
[44582] = 38973, -- Scroll of Enchant Cloak - Spell Piercing
[44584] = 38974, -- Scroll of Enchant Boots - Greater Vitality
[44588] = 38975, -- Scroll of Enchant Chest - Exceptional Resilience
[44589] = 38976, -- Scroll of Enchant Boots - Superior Agility
[44590] = 38977, -- Scroll of Enchant Cloak - Superior Shadow Resistance
[44591] = 38978, -- Scroll of Enchant Cloak - Titanweave
[44592] = 38979, -- Scroll of Enchant Gloves - Exceptional Spellpower
[44593] = 38980, -- Scroll of Enchant Bracers - Major Spirit
[44595] = 38981, -- Scroll of Enchant 2H Weapon - Scourgebane
[44596] = 38982, -- Scroll of Enchant Cloak - Superior Arcane Resistance
[44598] = 38984, -- Scroll of Enchant Bracer - Expertise
[44612] = 38985, -- Scroll of Enchant Gloves - Greater Blasting
[44616] = 38987, -- Scroll of Enchant Bracers - Greater Stats
[44621] = 38988, -- Scroll of Enchant Weapon - Giant Slayer
[44623] = 38989, -- Scroll of Enchant Chest - Super Stats
[44625] = 38990, -- Scroll of Enchant Gloves - Armsman
[44629] = 38991, -- Scroll of Enchant Weapon - Exceptional Spellpower
[44630] = 38992, -- Scroll of Enchant 2H Weapon - Greater Savagery
[44631] = 38993, -- Scroll of Enchant Cloak - Shadow Armor
[44633] = 38995, -- Scroll of Enchant Weapon - Exceptional Agility
[44635] = 38997, -- Scroll of Enchant Bracers - Greater Spellpower
[46578] = 38998, -- Scroll of Enchant Weapon - Deathfrost
[46594] = 38999, -- Scroll of Enchant Chest - Defense
[47051] = 39000, -- Scroll of Enchant Cloak - Steelweave
[47672] = 39001, -- Scroll of Enchant Cloak - Mighty Armor
[47766] = 39002, -- Scroll of Enchant Chest - Greater Defense
[47898] = 39003, -- Scroll of Enchant Cloak - Greater Speed
[47899] = 39004, -- Scroll of Enchant Cloak - Wisdom
[47900] = 39005, -- Scroll of Enchant Chest - Super Health
[47901] = 39006, -- Scroll of Enchant Boots - Tuskarr's Vitality
[59619] = 44497, -- Scroll of Enchant Weapon - Accuracy
[59621] = 44493, -- Scroll of Enchant Weapon - Berserking
[59625] = 43987, -- Scroll of Enchant Weapon - Black Magic
[60606] = 44449, -- Scroll of Enchant Boots - Assault
[60609] = 44456, -- Scroll of Enchant Cloak - Speed
[60616] = 38971, -- Scroll of Enchant Bracers - Striking
[60621] = 44453, -- Scroll of Enchant Weapon - Greater Potency
[60623] = 38986, -- Scroll of Enchant Boots - Icewalker
[60653] = 44455, -- Scroll of Enchant Shield - Greater Intellect
[60663] = 44457, -- Scroll of Enchant Cloak - Major Agility
[60668] = 44458, -- Scroll of Enchant Gloves - Crusher
[60691] = 44463, -- Scroll of Enchant 2H Weapon - Massacre
[60692] = 44465, -- Scroll of Enchant Chest - Powerful Stats
[60707] = 44466, -- Scroll of Enchant Weapon - Superior Potency
[60714] = 44467, -- Scroll of Enchant Weapon - Mighty Spellpower
[60763] = 44469, -- Scroll of Enchant Boots - Greater Assault
[60767] = 44470, -- Scroll of Enchant Bracer - Superior Spellpower
[62256] = 44947, -- Scroll of Enchant Bracer - Major Stamina
[62257] = 44946, -- Scroll of Enchant Weapon - Titanguard
[62948] = 45056, -- Scroll of Enchant Staff - Greater Spellpower
[62959] = 45060, -- Scroll of Enchant Staff - Spellpower
[63746] = 45628, -- Scroll of Enchant Boots - Lesser Accuracy
[64441] = 46026, -- Scroll of Enchant Weapon - Blade Ward
[64579] = 46098, -- Scroll of Enchant Weapon - Blood Draining
[71692] = 50816, -- Scroll of Enchant Gloves - Angler
[968676] = 967760, -- Scroll of Enchant Weapon - Unstoppable Assault I
[968677] = 967761, -- Scroll of Enchant Weapon - Unstoppable Assault II
[968678] = 967762, -- Scroll of Enchant Weapon - Unstoppable Assault III
[968679] = 967763, -- Scroll of Enchant Weapon - Lucid Assault I
[968680] = 967764, -- Scroll of Enchant Weapon - Lucid Assault II
[968681] = 967765, -- Scroll of Enchant Weapon - Lucid Assault III
[968682] = 967766, -- Scroll of Enchant Weapon - Spellbinder's Rage I
[968683] = 967767, -- Scroll of Enchant Weapon - Spellbinder's Rage II
[968684] = 967768, -- Scroll of Enchant Weapon - Spellbinder's Rage III
[968685] = 967769, -- Scroll of Enchant Weapon - Ninja's Focus I
[968686] = 967770, -- Scroll of Enchant Weapon - Ninja's Focus II
[968687] = 967771, -- Scroll of Enchant Weapon - Ninja's Focus III
[968688] = 967772, -- Scroll of Enchant Weapon - Grovewarden's Blessing I
[968689] = 967773, -- Scroll of Enchant Weapon - Grovewarden's Blessing II
[968690] = 967774, -- Scroll of Enchant Weapon - Grovewarden's Blessing III
[968691] = 967775, -- Scroll of Enchant Weapon - Viscious Assault I
[968692] = 967776, -- Scroll of Enchant Weapon - Viscious Assault II
[968693] = 967777, -- Scroll of Enchant Weapon - Viscious Assault III
[968694] = 967778, -- Scroll of Enchant Weapon - Arcane Dexterity I
[968695] = 967779, -- Scroll of Enchant Weapon - Arcane Dexterity II
[968696] = 967780, -- Scroll of Enchant Weapon - Arcane Dexterity III
[968697] = 967781, -- Scroll of Enchant Weapon - Arcane Artillery I
[968698] = 967782, -- Scroll of Enchant Weapon - Arcane Artillery II
[968699] = 967783, -- Scroll of Enchant Weapon - Arcane Artillery III
[968700] = 967784, -- Scroll of Enchant Weapon - Arcane Precision I
[968701] = 967785, -- Scroll of Enchant Weapon - Arcane Precision II
[968702] = 967786, -- Scroll of Enchant Weapon - Arcane Precision III
[968770] = 967787, -- Scroll of Enchant Weapon - Crusader II
[968771] = 967788, -- Scroll of Enchant Weapon - Crusader III
[1968677] = 1204125, -- Scroll of Enchant Weapon - Void Assault
[1968678] = 1204126, -- Scroll of Enchant Weapon - Overpowering Void Assault
[1968680] = 1204127, -- Scroll of Enchant Weapon - Dread Assault
[1968681] = 1204128, -- Scroll of Enchant Weapon - Overpowering Dread Assault
[1968683] = 1204129, -- Scroll of Enchant Weapon - Twisted Evoker
[1968684] = 1204130, -- Scroll of Enchant Weapon - Overpowering Twisted Evoker
[1968686] = 1204131, -- Scroll of Enchant Weapon - Twisted Assault
[1968687] = 1204132, -- Scroll of Enchant Weapon - Overpowering Twisted Assault
[1968689] = 1204133, -- Scroll of Enchant Weapon - Twisted Channeler
[1968690] = 1204134, -- Scroll of Enchant Weapon - Overpowering Twisted Channeler
[1968692] = 1204135, -- Scroll of Enchant Weapon - Dread Omen Strikes
[1968693] = 1204136, -- Scroll of Enchant Weapon - Overpowering Dread Omen Strikes
[1968695] = 1204137, -- Scroll of Enchant Weapon - Void Flows
[1968696] = 1204138, -- Scroll of Enchant Weapon - Overpowering Void Flows
[1968698] = 1204139, -- Scroll of Enchant Weapon - Void Blasting
[1968699] = 1204140, -- Scroll of Enchant Weapon - Overpowering Void Blasting
[1968701] = 1204141, -- Scroll of Enchant Weapon - Dread Precision
[1968702] = 1204142, -- Scroll of Enchant Weapon - Overpowering Dread Precision
[1968770] = 1204143, -- Scroll of Enchant Weapon - Twisted Crusader
[1968771] = 1204144, -- Scroll of Enchant Weapon - Overpowering Twisted Crusader
}
@@ -0,0 +1,188 @@
-- ------------------------------------------------------------------------------ --
-- TradeSkillMaster_Crafting --
-- http://www.curse.com/addons/wow/tradeskillmaster_crafting --
-- --
-- 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 Gather = TSM:NewModule("Gather", "AceEvent-3.0")
local L = LibStub("AceLocale-3.0"):GetLocale("TradeSkillMaster_Crafting") -- loads the localization table
local next = next
local private = { shoppingItems = {} }
function Gather:BuyFromMerchant(neededMats)
for i = 1, GetMerchantNumItems() do
local itemString = TSMAPI:GetItemString(GetMerchantItemLink(i))
if neededMats[itemString] then
local maxStack = GetMerchantItemMaxStack(i)
local toBuy = neededMats[itemString]
while toBuy > 0 do
BuyMerchantItem(i, math.min(toBuy, maxStack))
toBuy = toBuy - maxStack
TSM.db.factionrealm.gathering.gatheredMats = true
end
end
end
end
function Gather:gatherItems(source, task)
local items = TSM.db.factionrealm.gathering.availableMats
if source == L["Vendor"] then
Gather:BuyFromMerchant(items)
elseif source == UnitName("player") and (task == L["Visit Bank"] or task == L["Visit Guild Bank"]) then
Gather:GatherBank(items)
elseif source == UnitName("player") and task == L["Mail Items"] then
Gather:MailItems(items)
elseif source == L["Auction House"] then
if TSMAPI:AHTabIsVisible("Shopping") then
private.shoppingItems = {}
for itemString, quantity in pairs(items) do
tinsert(private.shoppingItems, { itemString = itemString, quantity = quantity })
end
Gather:ShoppingSearch(private.shoppingItems[1].itemString, private.shoppingItems[1].quantity)
else
TSM:Printf(L["Please switch to the Shopping Tab to perform the gathering search."])
end
end
end
function Gather:GatherBank(moveItems)
local next = next
if next(moveItems) == nil then
TSM:Print(L["Nothing to Gather"])
else
TSM:Print(L["Gathering Crafting Mats"])
TSMAPI:MoveItems(moveItems, Gather.PrintMsg)
TSM.db.factionrealm.gathering.gatheredMats = true
end
end
function Gather.PrintMsg(message)
if message then
TSM:Print(message)
end
end
function Gather:MerchantSells(neededItem)
for i = 1, GetMerchantNumItems() do
local itemString = TSMAPI:GetItemString(GetMerchantItemLink(i))
if neededItem == itemString then
return true
end
end
return false
end
function Gather:MailItems(neededItems)
local next = next
if next(neededItems) == nil then
TSM:Print(L["Nothing to Mail"])
else
local crafter = TSM.db.factionrealm.gathering.crafter
if crafter then
TSM:Print(format(L["Mailing Craft Mats to %s"], crafter))
TSMAPI:ModuleAPI("Mailing", "mailItems", neededItems, crafter, Gather.PrintMsg)
TSM.db.factionrealm.gathering.gatheredMats = true
end
end
end
local function ShoppingNextSearch()
if next(private.shoppingItems) then
Gather:ShoppingSearch(private.shoppingItems[1].itemString, private.shoppingItems[1].quantity)
end
end
local function ShoppingCallback(remainingQty, boughtItem, stackSize)
if not boughtItem then
if next(private.shoppingItems) then
local name = TSMAPI:GetSafeItemInfo(private.shoppingItems[1].itemString)
TSM:Print("No Auctions found for", name)
tremove(private.shoppingItems, 1)
TSMAPI:CreateTimeDelay("shoppingSearchThrottle", 0.5, ShoppingNextSearch)
end
else
TSM.Inventory.gatherQuantity = remainingQty
if TSM.Inventory.gatherItem and boughtItem ~= TSM.Inventory.gatherItem then
for itemString, data in pairs(TSMAPI.Conversions[TSM.Inventory.gatherItem] or {}) do
if itemString == boughtItem then
TSM.db.factionrealm.gathering.destroyingMats[boughtItem] = (TSM.db.factionrealm.gathering.destroyingMats[boughtItem] or 0) + stackSize
end
end
end
if max(TSM.Inventory.gatherQuantity, 0) == 0 and next(private.shoppingItems) then
tremove(private.shoppingItems, 1)
TSMAPI:CreateTimeDelay("shoppingSearchThrottle", 0.5, ShoppingNextSearch)
end
end
end
function Gather:ShoppingSearch(itemString, need, ignoreMaxQty)
TSM.Inventory.gatherQuantity = nil
local matPrice = TSMAPI:FormatTextMoney(TSM.Cost:GetMatCost(itemString))
if not TSM.db.factionrealm.gathering.destroyDisable then
if TSMAPI.InkConversions[itemString] then
TSM.Inventory.gatherItem = itemString
if TSM.db.factionrealm.gathering.evenStacks then
if ignoreMaxQty then
TSMAPI:ModuleAPI("Shopping", "runDestroySearch", TSMAPI:GetSafeItemInfo(itemString) .. "/even", ShoppingCallback)
else
TSMAPI:ModuleAPI("Shopping", "runDestroySearch", TSMAPI:GetSafeItemInfo(itemString) .. "/even/x" .. need, ShoppingCallback)
end
elseif ignoreMaxQty then
TSMAPI:ModuleAPI("Shopping", "runDestroySearch", TSMAPI:GetSafeItemInfo(itemString), ShoppingCallback)
else
TSMAPI:ModuleAPI("Shopping", "runDestroySearch", TSMAPI:GetSafeItemInfo(itemString) .. "/x" .. need, ShoppingCallback)
end
elseif TSMAPI:GetDisenchantData(itemString) then
TSM.Inventory.gatherItem = itemString
if ignoreMaxQty then
TSMAPI:ModuleAPI("Shopping", "runDestroySearch", TSMAPI:GetSafeItemInfo(itemString) .. "/exact", ShoppingCallback)
else
TSMAPI:ModuleAPI("Shopping", "runDestroySearch", TSMAPI:GetSafeItemInfo(itemString) .. "/exact/x" .. need, ShoppingCallback)
end
elseif TSMAPI.Conversions[itemString] then
TSM.Inventory.gatherItem = itemString
local convertSource
for _, data in pairs(TSMAPI.Conversions[itemString]) do
convertSource = data.source
break
end
if convertSource == "mill" or convertSource == "prospect" then
if TSM.db.factionrealm.gathering.evenStacks then
if ignoreMaxQty then
TSMAPI:ModuleAPI("Shopping", "runDestroySearch", TSMAPI:GetSafeItemInfo(itemString) .. "/even", ShoppingCallback)
else
TSMAPI:ModuleAPI("Shopping", "runDestroySearch", TSMAPI:GetSafeItemInfo(itemString) .. "/even/x" .. need, ShoppingCallback)
end
elseif ignoreMaxQty then
TSMAPI:ModuleAPI("Shopping", "runDestroySearch", TSMAPI:GetSafeItemInfo(itemString), ShoppingCallback)
else
TSMAPI:ModuleAPI("Shopping", "runDestroySearch", TSMAPI:GetSafeItemInfo(itemString) .. "/x" .. need, ShoppingCallback)
end
else
TSMAPI:ModuleAPI("Shopping", "runSearch", TSMAPI:GetSafeItemInfo(itemString) .. "/exact/x" .. need, ShoppingCallback)
end
else
TSM.Inventory.gatherItem = nil
if ignoreMaxQty then
TSMAPI:ModuleAPI("Shopping", "runSearch", TSMAPI:GetSafeItemInfo(itemString) .. "/exact", ShoppingCallback)
else
TSMAPI:ModuleAPI("Shopping", "runSearch", TSMAPI:GetSafeItemInfo(itemString) .. "/exact/x" .. need, ShoppingCallback)
end
end
else
TSM.Inventory.gatherItem = nil
if ignoreMaxQty then
TSMAPI:ModuleAPI("Shopping", "runSearch", TSMAPI:GetSafeItemInfo(itemString) .. "/exact", ShoppingCallback)
else
TSMAPI:ModuleAPI("Shopping", "runSearch", TSMAPI:GetSafeItemInfo(itemString) .. "/exact/x" .. need, ShoppingCallback)
end
end
end
@@ -0,0 +1,340 @@
-- ------------------------------------------------------------------------------ --
-- TradeSkillMaster_Crafting --
-- http://www.curse.com/addons/wow/tradeskillmaster_crafting --
-- --
-- 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 Inventory = TSM:NewModule("Inventory", "AceEvent-3.0")
local L = LibStub("AceLocale-3.0"):GetLocale("TradeSkillMaster_Crafting") -- loads the localization table
-- gets the number of an item in the current player's bags
function Inventory:GetPlayerBagNum(itemString)
if not itemString then return end
if TSMAPI.SOULBOUND_MATS[itemString] then
return GetItemCount(itemString)
else
local bags = TSMAPI:ModuleAPI("ItemTracker", "playerbags", UnitName("player")) or {}
return bags and bags[itemString] or 0
end
end
function Inventory:GetTotals()
local bagTotal, auctionTotal, otherTotal, total = {}, {}, {}, {}
for _, player in pairs(TSMAPI:ModuleAPI("ItemTracker", "playerlist") or {}) do
if player == UnitName("player") or not TSM.db.global.ignoreCharacters[player] then
local bags = TSMAPI:ModuleAPI("ItemTracker", "playerbags", player) or {}
local bank = TSMAPI:ModuleAPI("ItemTracker", "playerbank", player) or {}
local mail = TSMAPI:ModuleAPI("ItemTracker", "playermail", player) or {}
local auctions = TSMAPI:ModuleAPI("ItemTracker", "playerauctions", player) or {}
for itemString, quantity in pairs(bags) do
if player == UnitName("player") then
bagTotal[itemString] = (bagTotal[itemString] or 0) + quantity
total[itemString] = (total[itemString] or 0) + quantity
else
otherTotal[itemString] = (otherTotal[itemString] or 0) + quantity
total[itemString] = (total[itemString] or 0) + quantity
end
end
for itemString, quantity in pairs(bank) do
otherTotal[itemString] = (otherTotal[itemString] or 0) + quantity
total[itemString] = (total[itemString] or 0) + quantity
end
for itemString, quantity in pairs(mail) do
otherTotal[itemString] = (otherTotal[itemString] or 0) + quantity
total[itemString] = (total[itemString] or 0) + quantity
end
for itemString, quantity in pairs(auctions) do
auctionTotal[itemString] = (auctionTotal[itemString] or 0) + quantity
total[itemString] = (total[itemString] or 0) + quantity
end
end
end
for itemString in pairs(TSMAPI.SOULBOUND_MATS) do
local bagNum = GetItemCount(itemString)
local bankNum = GetItemCount(itemString, true) - GetItemCount(itemString)
bagTotal[itemString] = (bagTotal[itemString] or 0) + bagNum
otherTotal[itemString] = (otherTotal[itemString] or 0) + bankNum
total[itemString] = (total[itemString] or 0) + bagNum + bankNum
end
-- add gbank counts of all non-ignored guilds
for _, guild in pairs(TSMAPI:ModuleAPI("ItemTracker", "guildlist") or {}) do
if not TSM.db.global.ignoreGuilds[guild] then
local gbank = TSMAPI:ModuleAPI("ItemTracker", "guildbank", guild) or {}
for itemString, quantity in pairs(gbank) do
otherTotal[itemString] = (otherTotal[itemString] or 0) + quantity
total[itemString] = (total[itemString] or 0) + quantity
end
end
end
return bagTotal, auctionTotal, otherTotal, total
end
-- gets the total number of some item that they have
function Inventory:GetTotalQuantity(itemString)
if not itemString then return 0 end
local count = 0
-- add bags/bank/mail/auction counts of all non-ignored characters (always including current character)
for _, player in pairs(TSMAPI:ModuleAPI("ItemTracker", "playerlist") or {}) do
if player == UnitName("player") or not TSM.db.global.ignoreCharacters[player] then
local bags = TSMAPI:ModuleAPI("ItemTracker", "playerbags", player) or {}
local bank = TSMAPI:ModuleAPI("ItemTracker", "playerbank", player) or {}
local mail = TSMAPI:ModuleAPI("ItemTracker", "playermail", player) or {}
local auctions = TSMAPI:ModuleAPI("ItemTracker", "playerauctions", player) or {}
count = count + (bags[itemString] or 0)
count = count + (bank[itemString] or 0)
count = count + (mail[itemString] or 0)
count = count + (auctions[itemString] or 0)
end
end
-- add gbank counts of all non-ignored guilds
for _, guild in pairs(TSMAPI:ModuleAPI("ItemTracker", "guildlist") or {}) do
if not TSM.db.global.ignoreGuilds[guild] then
local bank = TSMAPI:ModuleAPI("ItemTracker", "guildbank", guild) or {}
count = count + (bank[itemString] or 0)
end
end
if TSMAPI.SOULBOUND_MATS[itemString] then
count = count + GetItemCount(itemString, true)
end
return count
end
function Inventory:GetItemSources(crafter, neededMats)
if not neededMats then return end
local sources = {}
local gbank = {}
local next = next
local crafterBags = TSMAPI:ModuleAPI("ItemTracker", "playerbags", crafter) or {}
local crafterMail = TSMAPI:ModuleAPI("ItemTracker", "playermail", crafter) or {}
local crafterBank = TSMAPI:ModuleAPI("ItemTracker", "playerbank", crafter) or {}
-- add vendor items
local task = {}
local items = {}
for itemString, quantity in pairs(neededMats) do
if TSMAPI:GetVendorCost(itemString) then
local vendorNeed = quantity - ((crafterBags[itemString] or 0) + (crafterMail[itemString] or 0) + (crafterBank[itemString] or 0))
if vendorNeed > 0 then
items[itemString] = vendorNeed
end
elseif TSMAPI.Conversions[itemString] and TSMAPI.InkConversions[itemString] then
local tradeItem, data = next(TSMAPI.Conversions[itemString])
if data.source == "vendortrade" then
local num = floor(Inventory:GetTotalQuantity(tradeItem) * data.rate)
if quantity > Inventory:GetTotalQuantity(itemString) and num >= (quantity - Inventory:GetTotalQuantity(itemString)) then
items[itemString] = quantity - Inventory:GetTotalQuantity(itemString)
neededMats[tradeItem] = (neededMats[tradeItem] or 0) + quantity / data.rate -- add the qty of IOD to needed mats
end
end
end
end
if next(items) then
tinsert(task, { taskType = L["Visit Vendor"], items = items })
tinsert(sources, { sourceName = L["Vendor"], isCrafter = false, isVendor = true, isAH = false, tasks = task })
end
-- double check if crafter already has all the items needed
local shortItems = {}
for itemString, quantity in pairs(neededMats) do
local soulboundBagCount
if TSMAPI.SOULBOUND_MATS[itemString] then
soulboundBagCount = GetItemCount(itemString)
end
local need = max(quantity - (crafterBags[itemString] or soulboundBagCount or 0), 0)
if need > 0 then
shortItems[itemString] = need
end
end
if not next(shortItems) then return end
-- add bags/bank/mail "tasks" for needed items of all non-ignored characters (always include crafter)
for _, player in pairs(TSMAPI:ModuleAPI("ItemTracker", "playerlist") or {}) do
if player == crafter or not TSM.db.global.ignoreCharacters[player] then
local task = {}
local bags = TSMAPI:ModuleAPI("ItemTracker", "playerbags", player) or {}
local bank = TSMAPI:ModuleAPI("ItemTracker", "playerbank", player) or {}
local guild = TSMAPI:ModuleAPI("ItemTracker", "playerguild", player) or {}
local gbank = {}
if guild and not TSM.db.global.ignoreGuilds[guild] then
gbank = TSMAPI:ModuleAPI("ItemTracker", "guildbank", guild) or {}
end
local mail = TSMAPI:ModuleAPI("ItemTracker", "playermail", player) or {}
local bankItems = {}
local gbankItems = {}
local mailItems = {}
local bagItems = {}
for itemString in pairs(neededMats) do
local soulboundBagCount, soulboundBankCount
if TSMAPI.SOULBOUND_MATS[itemString] then
soulboundBagCount = GetItemCount(itemString)
soulboundBankCount = GetItemCount(itemString, true) - soulboundBagCount
end
if (bank[itemString] or (soulboundBankCount and soulboundBankCount > 0)) and shortItems[itemString] then
if shortItems[itemString] - (crafterMail[itemString] or 0) - (player ~= crafter and bags[itemString] or 0) > 0 then
bankItems[itemString] = bank[itemString] or soulboundBankCount
end
end
if gbank[itemString] and shortItems[itemString] then
if shortItems[itemString] - (crafterMail[itemString] or 0) - (player ~= crafter and bags[itemString] or 0) > 0 then
gbankItems[itemString] = gbank[itemString]
end
end
if mail[itemString] and shortItems[itemString] then
mailItems[itemString] = mail[itemString]
end
if bags[itemString] and shortItems[itemString] then
if player ~= crafter then
if shortItems[itemString] - (crafterMail[itemString] or 0) > 0 then
bagItems[itemString] = bags[itemString]
end
end
end
end
-- add mail tasks for destroyable items bought through shopping search (exclude items already added to mail tasks)
for itemString, quantity in pairs(TSM.db.factionrealm.gathering.destroyingMats) do
if mail[itemString] and not shortItems[itemString] then
mailItems[itemString] = quantity
end
end
if next(bankItems) then
tinsert(task, { taskType = L["Visit Bank"], items = bankItems })
end
if next(gbankItems) then
tinsert(task, { taskType = L["Visit Guild Bank"], items = gbankItems })
end
if next(mailItems) then
tinsert(task, { taskType = L["Collect Mail"], items = mailItems })
end
if next(bagItems) then
tinsert(task, { taskType = L["Mail Items"], items = bagItems })
end
if next(task) then
tinsert(sources, { sourceName = player, isCrafter = player == crafter, isVendor = false, isAH = false, tasks = task, isCurrent = (player == UnitName("player")) })
end
end
end
-- add auction house tasks
local auctionTask = {}
local auctionItems = {}
for itemString, quantity in pairs(neededMats) do
if not TSMAPI.SOULBOUND_MATS[itemString] and not TSMAPI:GetVendorCost(itemString) then
local need
if TSM.Inventory.gatherItem == itemString and TSM.Inventory.gatherQuantity then
need = TSM.Inventory.gatherQuantity
else
need = max(quantity - (TSM.Inventory:GetTotalQuantity(itemString) or 0), 0)
end
if need > 0 then
auctionItems[itemString] = need
end
end
end
if next(auctionItems) then
tinsert(auctionTask, { taskType = L["Search for Mats"], items = auctionItems })
tinsert(sources, { sourceName = L["Auction House"], isCrafter = false, isVendor = false, isAH = true, tasks = auctionTask })
end
-- add destroying tasks
local destroyingTask, millItems, prospectItems, transformItems, deItems = {}, {}, {}, {}, {}
for itemString, quantity in pairs(neededMats) do
local need = max(quantity - (TSM.Inventory:GetTotalQuantity(itemString) or 0), 0)
-- conversion items
for destroyItem, data in pairs(TSMAPI.Conversions[itemString] or {}) do
if TSM.db.factionrealm.gathering.destroyingMats[destroyItem] then
if need > 0 then
local destroyNeed
if data.source == "mill" then
destroyNeed = floor(TSM.db.factionrealm.gathering.destroyingMats[destroyItem] / 5)
if destroyNeed > 0 then
millItems[destroyItem] = (millItems[destroyItem] or 0) + destroyNeed
end
elseif data.source == "prospect" then
destroyNeed = floor(TSM.db.factionrealm.gathering.destroyingMats[destroyItem] / 5)
if destroyNeed > 0 then
prospectItems[destroyItem] = (prospectItems[destroyItem] or 0) + destroyNeed
end
elseif data.source == "transform" then
if data.rate == 1 / 3 then
destroyNeed = floor(TSM.db.factionrealm.gathering.destroyingMats[destroyItem] / 3)
elseif data.rate == 1 / 10 then
destroyNeed = floor(TSM.db.factionrealm.gathering.destroyingMats[destroyItem] / 10)
else
destroyNeed = TSM.db.factionrealm.gathering.destroyingMats[destroyItem]
end
if destroyNeed > 0 then
transformItems[destroyItem] = (transformItems[destroyItem] or 0) + destroyNeed
end
end
else
TSM.db.factionrealm.gathering.destroyingMats[destroyItem] = nil
end
end
end
-- disenchantable items
if next(TSM.db.factionrealm.gathering.destroyingMats) then
for deItemString, quantity in pairs(TSM.db.factionrealm.gathering.destroyingMats) do
if Inventory:IsDisenchantable(deItemString) then
if need > 0 then
deItems[deItemString] = quantity
else
TSM.db.factionrealm.gathering.destroyingMats[deItemString] = nil
end
end
end
end
end
if next(millItems) then
tinsert(destroyingTask, { taskType = L["Milling"], items = millItems })
end
if next(prospectItems) then
tinsert(destroyingTask, { taskType = L["Prospect"], items = prospectItems })
end
if next(transformItems) then
tinsert(destroyingTask, { taskType = L["Transform"], items = transformItems })
end
if next(deItems) then
tinsert(destroyingTask, { taskType = L["Disenchant"], items = deItems })
end
if next(destroyingTask) then
tinsert(sources, { sourceName = L["Destroying"], isCrafter = false, isVendor = false, isAH = true, tasks = destroyingTask })
end
sort(sources, function(a, b)
if a.isCurrent then return true end
if b.isCurrent then return false end
if a.isAH then return false end
if b.isAH then return true end
if a.isVendor then return false end
if b.isVendor then return true end
if a.isCrafter then return false end
if b.isCrafter then return true end
return a.sourceName < b.sourceName
end)
return sources
end
function Inventory:IsDisenchantable(itemString)
local _, link, quality, _, _, iType = TSMAPI:GetSafeItemInfo(itemString)
local WEAPON, ARMOR = GetAuctionItemClasses()
if itemString and not TSMAPI.DisenchantingData.notDisenchantable[itemString] and (iType == ARMOR or iType == WEAPON) then
return true
end
end
File diff suppressed because it is too large Load Diff
+257
View File
@@ -0,0 +1,257 @@
-- ------------------------------------------------------------------------------ --
-- TradeSkillMaster_Crafting --
-- http://www.curse.com/addons/wow/tradeskillmaster_crafting --
-- --
-- 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 Queue = TSM:NewModule("Queue")
local L = LibStub("AceLocale-3.0"):GetLocale("TradeSkillMaster_Crafting") -- loads the localization table
local MAX_QUEUE_STAGES = 10
local inventoryTotals = {}
local notified = {}
function Queue:ValidateOperation(operation, opName)
if not operation then return end
if operation.minRestock > operation.maxRestock then
-- invalid cause min > max restock quantity (shouldn't happen)
if not notified[opName] then
notified[opName] = true
TSM:Printf(L["'%s' is an invalid operation! Min restock of %d is higher than max restock of %d."], opName, operation.minRestock, operation.maxRestock)
end
return
end
return true
end
function Queue:CreateRestockQueue(groupInfo)
TSM:UpdateCraftReverseLookup()
local numItems = 0
for _, data in pairs(groupInfo) do
for _, opName in ipairs(data.operations) do
TSMAPI:UpdateOperation("Crafting", opName)
local opSettings = TSM.operations[opName]
if Queue:ValidateOperation(opSettings, opName) then
-- it's a valid operation
for itemString in pairs(data.items) do
itemString = TSMAPI:GetItemString(itemString)
local spellID = TSM.craftReverseLookup[itemString] and TSM.craftReverseLookup[itemString][1]
if spellID and TSM.db.factionrealm.crafts[spellID] then
local maxQueueCount = max(opSettings.maxRestock - TSM.Inventory:GetTotalQuantity(itemString), 0)
local numToQueue = 0
if not opSettings.minProfit then
-- no minimum, so queue as many as we can
numToQueue = maxQueueCount
else
-- queue it if the profit is at least the min profit
local cheapestSpellID, cost, _, profit = TSM.Cost:GetLowestCraftPrices(itemString)
local minProfit = TSM:GetCustomPrice(opSettings.minProfit, itemString)
if minProfit and profit and profit >= minProfit then
spellID = cheapestSpellID
numToQueue = maxQueueCount
end
end
local craft = TSM.db.factionrealm.crafts[spellID]
craft.queued = floor(numToQueue / craft.numResult)
craft.queued = craft.queued >= opSettings.minRestock and craft.queued or 0
if craft.queued > 0 then
numItems = numItems + 1
end
end
end
end
end
end
if numItems==0 then
TSM:Printf("There are no items to restock.")
end
TSMAPI:FireEvent("CRAFTING:QUEUE:RESTOCKED", numItems)
end
function Queue:HasLoop(itemString, steps, visited)
steps = steps + 1
if steps > 10 then return true end
if visited[itemString] then return true end
visited[itemString] = true
local craftCost = TSM:GetCustomPrice("Crafting", itemString)
local mat = TSM.db.factionrealm.mats[itemString]
local lowestCost = TSM:GetCustomPrice(mat.customValue or TSM.db.global.defaultMatCostMethod, itemString)
if craftCost and lowestCost and craftCost <= lowestCost and (not TSM.db.global.neverCraftInks or not TSMAPI.InkConversions[itemString]) then
local spellID = TSM.Cost:GetLowestCraftPrices(itemString, true)
if spellID and TSM.db.factionrealm.crafts[spellID] then
for matItemString in pairs(TSM.db.factionrealm.crafts[spellID].mats) do
if Queue:HasLoop(matItemString, steps, CopyTable(visited)) then
return true
end
end
end
end
end
function Queue:GetIntermediateCrafts(mats, usedItems, usedMats, tempMats)
local subCrafts = {}
for profession, data in pairs(mats) do
tempMats[profession] = tempMats[profession] or {}
for itemString, quantity in pairs(data) do
usedItems[itemString] = usedItems[itemString] or 0
local numHave = (inventoryTotals[itemString] or 0) - usedItems[itemString]
if TSMAPI.SOULBOUND_MATS[itemString] then
numHave = numHave + GetItemCount(itemString, true)
end
if numHave > 0 then
if numHave >= quantity then
usedItems[itemString] = usedItems[itemString] + quantity
tempMats[profession][itemString] = (tempMats[profession][itemString] or 0) + quantity
quantity = 0
mats[profession][itemString] = nil
else
usedItems[itemString] = numHave
quantity = quantity - numHave
tempMats[profession][itemString] = (tempMats[profession][itemString] or 0) + numHave
mats[profession][itemString] = mats[profession][itemString] - numHave
end
end
if quantity > 0 and not Queue:HasLoop(itemString, 0, {}) then
local mat = TSM.db.factionrealm.mats[itemString]
local craftCost = TSM:GetCustomPrice("Crafting", itemString)
local lowestCost = TSM:GetCustomPrice(mat.customValue or TSM.db.global.defaultMatCostMethod, itemString)
if craftCost and lowestCost and craftCost <= lowestCost and (not TSM.db.global.neverCraftInks or not TSMAPI.InkConversions[itemString]) then
local spellID = TSM.Cost:GetLowestCraftPrices(itemString, true)
if spellID and TSM.db.factionrealm.crafts[spellID] then
local numResult = TSM.db.factionrealm.crafts[spellID].numResult
quantity = ceil(quantity / numResult)
subCrafts[TSM.db.factionrealm.crafts[spellID].profession] = subCrafts[TSM.db.factionrealm.crafts[spellID].profession] or {}
subCrafts[TSM.db.factionrealm.crafts[spellID].profession][spellID] = (subCrafts[TSM.db.factionrealm.crafts[spellID].profession][spellID] or 0) + quantity
TSM.db.factionrealm.crafts[spellID].queued = TSM.db.factionrealm.crafts[spellID].queued + quantity
TSM.db.factionrealm.crafts[spellID].intermediateQueued = (TSM.db.factionrealm.crafts[spellID].intermediateQueued or 0) + quantity
mats[profession][itemString] = nil
usedMats[profession] = usedMats[profession] or {}
usedMats[profession][itemString] = numHave
end
end
end
end
end
local newSubCrafts
for profession, data in pairs(subCrafts) do
for spellID, quantity in pairs(data) do
newSubCrafts = true
for itemString, matQuantity in pairs(TSM.db.factionrealm.crafts[spellID].mats) do
mats[profession] = mats[profession] or {}
mats[profession][itemString] = (mats[profession][itemString] or 0) + matQuantity * quantity
end
end
end
return newSubCrafts and subCrafts
end
function Queue:GetQueue()
local tempCrafts, queuedCrafts, mats = {}, {}, {}
local totalCost, totalProfit
-- first queue up all the normally queued stuff
for spellID, data in pairs(TSM.db.factionrealm.crafts) do
if data.intermediateQueued then
data.queued = max(data.queued - data.intermediateQueued, 0)
data.intermediateQueued = nil
end
if data.queued > 0 then
local cost, buyout, profit = TSM.Cost:GetCraftPrices(spellID)
if cost then
totalCost = (totalCost or 0) + cost * data.queued
end
if profit then
totalProfit = (totalProfit or 0) + profit * data.queued
end
tempCrafts[data.profession] = tempCrafts[data.profession] or {}
tempCrafts[data.profession][spellID] = data.queued
for itemString, quantity in pairs(data.mats) do
mats[data.profession] = mats[data.profession] or {}
mats[data.profession][itemString] = (mats[data.profession][itemString] or 0) + quantity * data.queued
end
end
end
for profession, data in pairs(tempCrafts) do
queuedCrafts[profession] = queuedCrafts[profession] or {}
tinsert(queuedCrafts[profession], 1, { crafts = data })
end
-- queue intermediate crafts
local usedItems, usedMats, tempMats = {}, {}, {}
inventoryTotals = select(4, TSM.Inventory:GetTotals())
for i = 1, MAX_QUEUE_STAGES - 1 do
local subCrafts = Queue:GetIntermediateCrafts(mats, usedItems, usedMats, tempMats)
if not subCrafts then break end
for profession, data in pairs(subCrafts) do
queuedCrafts[profession] = queuedCrafts[profession] or {}
tinsert(queuedCrafts[profession], 1, { crafts = data })
end
end
-- readd usedMats back in
for profession, data in pairs(tempMats) do
for itemString, quantity in pairs(data) do
mats[profession][itemString] = (mats[profession][itemString] or 0) + quantity
end
end
for profession, data in pairs(usedMats) do
if mats[profession] then
for itemString, quantity in pairs(data) do
mats[profession][itemString] = (mats[profession][itemString] or 0) + quantity
end
end
end
-- give each stage the appropriate name
for profession, stages in pairs(queuedCrafts) do
for i, stageInfo in ipairs(stages) do
stageInfo.name = format(L["Stage %d"], i)
end
end
totalCost = totalCost or "---"
totalProfit = totalProfit or "---"
return queuedCrafts, mats, totalCost, totalProfit
end
function Queue:ClearQueue()
for spellID, data in pairs(TSM.db.factionrealm.crafts) do
data.queued = 0
data.intermediateQueued = nil
end
end
function Queue:addQueue(spellID, quantity)
local craft = TSM.db.factionrealm.crafts[spellID]
if not craft then return end
quantity = quantity or 1
craft.queued = craft.queued + quantity
TSM.CraftingGUI:UpdateQueue()
end
function Queue:removeQueue(spellID, quantity)
local craft = TSM.db.factionrealm.crafts[spellID]
if not craft then return end
quantity = quantity or 1
craft.queued = max(craft.queued - quantity, 0)
TSM.CraftingGUI:UpdateQueue()
end
function Queue:getQueue(spellID)
local craft = TSM.db.factionrealm.crafts[spellID]
return craft.queued
end
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,63 @@
-- ------------------------------------------------------------------------------ --
-- TradeSkillMaster_Crafting --
-- http://www.curse.com/addons/wow/tradeskillmaster_crafting --
-- --
-- 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 Sync = TSM:NewModule("Sync")
local syncQueue = {}
function Sync:OnEnable()
Sync:BroadcastTradeSkillData()
end
function Sync:OpenTradeSkill()
if not TSM.isSyncing then return end
local tradeString = strsub(select(3, ("|"):split(TSM.isSyncing.link)), 2)
SetItemRef(tradeString, TSM.isSyncing.link, "LeftButton", ChatFrame1)
end
function Sync:BroadcastTradeSkillData(timerUp)
if not timerUp then
TSMAPI:CreateTimeDelay("craftingSyncDelay", 3, function() Sync:BroadcastTradeSkillData(true) end)
return
end
local player = UnitName("player")
local playerTradeSkills = TSM.db.factionrealm.tradeSkills[player]
if not playerTradeSkills then return end
local packet = {tradeSkills={}, accountKey=TSMAPI.Sync:GetAccountKey()}
for name, data in pairs(playerTradeSkills) do
if data.accountKey == TSMAPI.Sync:GetAccountKey() then
packet.tradeSkills[player.."~"..name] = data.link
end
end
TSMAPI.Sync:BroadcastData("Crafting", "TRADESKILLS", packet)
end
function Sync:ProcessTradeSkills(data)
for key, link in pairs(data.tradeSkills) do
local player, tradeSkill = ("~"):split(key)
if not (TSM.db.factionrealm.tradeSkills[player] and TSM.db.factionrealm.tradeSkills[player][tradeSkill] and TSM.db.factionrealm.tradeSkills[player][tradeSkill].link == link) then
tinsert(syncQueue, {link=link, accountKey=data.accountKey, player=player})
end
end
TSMAPI:CreateTimeDelay("craftingSyncProcessQueue", 0, Sync.ProcessQueue)
end
function Sync:ProcessQueue()
if TSM.isSyncing then return TSMAPI:CreateTimeDelay("craftingSyncProcessQueue", 0.1, Sync.ProcessQueue) end
TSM.isSyncing = tremove(syncQueue, 1)
Sync:OpenTradeSkill()
TSMAPI:CreateTimeDelay("craftingSyncProcessQueue", 1, Sync.ProcessQueue)
end
function Sync:Callback(key, data, source)
if key == "TRADESKILLS" then
Sync:ProcessTradeSkills(data)
end
end
+330
View File
@@ -0,0 +1,330 @@
-- ------------------------------------------------------------------------------ --
-- TradeSkillMaster_Crafting --
-- http://www.curse.com/addons/wow/tradeskillmaster_crafting --
-- --
-- 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 Util = TSM:NewModule("Util")
-- local VELLUM_ID = "item:38682:0:0:0:0:0:0"
local scanTooltip
function GetTradeSkillReagentItemLink(skillIndex, reagentLink)
if not scanTooltip then
scanTooltip = CreateFrame("GameTooltip", "TSMCraftingScanTooltip", UIParent, "GameTooltipTemplate")
scanTooltip:SetOwner(UIParent, "ANCHOR_NONE")
end
scanTooltip:ClearLines()
scanTooltip:SetTradeSkillItem(skillIndex, reagentLink)
return select(2, scanTooltip:GetItem())
end
function Util:IsProfessionReady()
if GetTradeSkillLine() == "UNKNOWN" or not GetNumTradeSkills() or GetNumTradeSkills() <= 0 or InCombatLockdown() then
return
end
for index=1, GetNumTradeSkills() do
local itemLink = GetTradeSkillItemLink(index)
local spellLink = GetTradeSkillRecipeLink(index)
if itemLink and spellLink and strfind(spellLink, "enchant:") then
local spellID, itemID, craftName
if strfind(itemLink, "enchant:") then
-- result of craft is enchant
spellID = Util:GetSpellID(index)
itemID = TSM.enchantingItemIDs[spellID] and "item:"..TSM.enchantingItemIDs[spellID]..":0:0:0:0:0:0"
elseif strfind(itemLink, "item:") then
-- result of craft is item
itemID = TSMAPI:GetItemString(itemLink)
spellID = Util:GetSpellID(index)
else
return
end
if itemID and spellID then
for i=1, GetTradeSkillNumReagents(index) do
local link = GetTradeSkillReagentItemLink(index, i)
local name, _, quantity = GetTradeSkillReagentInfo(index, i)
if not name or not link then
return
end
end
end
end
end
return true
end
function Util:ScanCurrentProfession()
if not Util:IsProfessionReady() then return TSMAPI:CreateTimeDelay("craftingScanDelay", 0.1, Util.ScanCurrentProfession) end
local newCrafts = {}
local playerName = UnitName("player")
local currentTradeSkill = GetTradeSkillLine()
local subClasses = {GetTradeSkillSubClasses()}
local currentSubClass = 0
local usedItems = {}
local presetGroupInfo = {}
local reagentLinkCache = {}
for index=1, GetNumTradeSkills() do
local itemLink = GetTradeSkillItemLink(index)
local spellLink = GetTradeSkillRecipeLink(index)
if not itemLink then
local skillName, skillType = GetTradeSkillInfo(index)
if skillType == "header" then
for j=1, #subClasses do
if skillName == subClasses[j] then
currentSubClass = j
break
end
end
end
elseif spellLink and strfind(spellLink, "enchant:") then
local spellID, itemID, craftName
if strfind(itemLink, "enchant:") then
-- result of craft is enchant
spellID = Util:GetSpellID(index)
itemID = TSM.enchantingItemIDs[spellID] and "item:"..TSM.enchantingItemIDs[spellID]..":0:0:0:0:0:0"
craftName = GetSpellInfo(spellID)
elseif strfind(itemLink, "item:") then
-- result of craft is item
itemID = TSMAPI:GetItemString(itemLink)
craftName = TSMAPI:GetSafeItemInfo(itemLink)
spellID = Util:GetSpellID(index)
end
if itemID and spellID then
local lNum, hNum = GetTradeSkillNumMade(index)
local numMade = floor(((lNum or 1) + (hNum or 1))/2)
local hasCD = select(2, GetTradeSkillCooldown(index)) and true or nil
local mats = {}
if currentTradeSkill == TSM.enchantingName and strfind(itemLink, "enchant:") then
local VellumString = "item:"..TSM.VellumInfo[spellID]..":0:0:0:0:0:0"
mats[VellumString] = 1
local name = TSMAPI:GetSafeItemInfo(VellumString) or nil
TSM.db.factionrealm.mats[VellumString] = TSM.db.factionrealm.mats[VellumString] or {}
TSM.db.factionrealm.mats[VellumString].name = TSM.db.factionrealm.mats[VellumString].name or name
numMade = 1
end
local isValid = true
for i=1, GetTradeSkillNumReagents(index) do
local name, texture, quantity = GetTradeSkillReagentInfo(index, i)
if not name then
isValid = false
break
end
if not reagentLinkCache[name.."\001"..texture] then
reagentLinkCache[name.."\001"..texture] = GetTradeSkillReagentItemLink(index, i)
end
local matID = TSMAPI:GetItemString(reagentLinkCache[name.."\001"..texture])
if not matID then
isValid = false
break
end
mats[matID] = quantity
TSM.db.factionrealm.mats[matID] = TSM.db.factionrealm.mats[matID] or {}
TSM.db.factionrealm.mats[matID].name = TSM.db.factionrealm.mats[matID].name or name
end
if isValid then
local players = TSM.db.factionrealm.crafts[spellID] and TSM.db.factionrealm.crafts[spellID].players or {}
players[playerName] = true
local queued = TSM.db.factionrealm.crafts[spellID] and TSM.db.factionrealm.crafts[spellID].queued or 0
local intermediateQueued = TSM.db.factionrealm.crafts[spellID] and TSM.db.factionrealm.crafts[spellID].intermediateQueued or nil
newCrafts[spellID] = {name=craftName, itemID=itemID, mats=mats, hasCD=hasCD, numResult=numMade, queued=queued, intermediateQueued=intermediateQueued, players=players, profession=currentTradeSkill}
if not usedItems[itemID] then
usedItems[itemID] = true
local itemString = TSMAPI:GetItemString(itemID)
if itemString then
for matItemString in pairs(mats) do
if not presetGroupInfo[matItemString] then
presetGroupInfo[matItemString] = TSMAPI:JoinGroupPath("Professions", currentTradeSkill, "Materials")
end
end
presetGroupInfo[itemString] = TSMAPI:JoinGroupPath("Professions", currentTradeSkill, "Crafts")
end
end
end
end
end
end
-- search for and remove any spells that we can't craft anymore
for spellID, data in pairs(TSM.db.factionrealm.crafts) do
if data.profession == currentTradeSkill then
local hasCrafters = false
for player in pairs(data.players) do
if player ~= playerName or newCrafts[spellID] then
hasCrafters = true
break
end
end
if not hasCrafters then
TSM.db.factionrealm.crafts[spellID] = nil
end
end
end
-- save the new craft info
for spellID, data in pairs(newCrafts) do
TSM.db.factionrealm.crafts[spellID] = data
end
TSM.CraftingGUI:PromptPresetGroups(currentTradeSkill, presetGroupInfo) --Bugged, asks after every login. Not saving prompt result between sessions. Either saving or loading bug (works fine on /reload though).
end
function Util:StartScanSyncedProfessionThread()
local function callback()
TradeSkillFrame:Show()
CloseTradeSkill()
TSM.isSyncing = nil
end
TSMAPI.Threading:Start(Util.ScanSyncedProfessionThread, 0.5, callback)
end
function Util.ScanSyncedProfessionThread(self)
local ready
for i=1, 10 do
if Util:IsProfessionReady() then
ready = true
break
end
self:Sleep(0.1)
end
if not ready then return end
local newCrafts = {}
local reagentLinkCache = {}
local _, playerName = IsTradeSkillLinked()
local currentTradeSkill = GetTradeSkillLine()
if playerName ~= TSM.isSyncing.player then return end
for index=1, GetNumTradeSkills() do
local itemLink = GetTradeSkillItemLink(index)
local spellLink = GetTradeSkillRecipeLink(index)
if itemLink and spellLink and strfind(spellLink, "enchant:") then
local spellID, itemID, craftName
if strfind(itemLink, "enchant:") then
-- result of craft is enchant
spellID = Util:GetSpellID(index)
itemID = TSM.enchantingItemIDs[spellID] and "item:"..TSM.enchantingItemIDs[spellID]..":0:0:0:0:0:0"
craftName = GetSpellInfo(spellID)
elseif strfind(itemLink, "item:") then
-- result of craft is item
itemID = TSMAPI:GetItemString(itemLink)
craftName = TSMAPI:GetSafeItemInfo(itemLink)
spellID = Util:GetSpellID(index)
end
if itemID and spellID then
local lNum, hNum = GetTradeSkillNumMade(index)
local numMade = floor(((lNum or 1) + (hNum or 1))/2)
local hasCD = select(2, GetTradeSkillCooldown(index)) and true or nil
local mats = {}
if currentTradeSkill == TSM.enchantingName and strfind(itemLink, "enchant:") then
local VellumString = "item:"..TSM.VellumInfo[spellID]..":0:0:0:0:0:0"
mats[VellumString] = 1
local name = TSMAPI:GetSafeItemInfo(VellumString) or nil
TSM.db.factionrealm.mats[VellumString] = TSM.db.factionrealm.mats[VellumString] or {}
TSM.db.factionrealm.mats[VellumString].name = TSM.db.factionrealm.mats[VellumString].name or name
numMade = 1
end
local isValid = true
for i=1, GetTradeSkillNumReagents(index) do
local name, texture, quantity = GetTradeSkillReagentInfo(index, i)
if not name then
isValid = false
break
end
if not reagentLinkCache[name.."\001"..texture] then
reagentLinkCache[name.."\001"..texture] = GetTradeSkillReagentItemLink(index, i)
end
local matID = TSMAPI:GetItemString(reagentLinkCache[name.."\001"..texture])
if not matID then
isValid = false
break
end
mats[matID] = quantity
TSM.db.factionrealm.mats[matID] = TSM.db.factionrealm.mats[matID] or {}
TSM.db.factionrealm.mats[matID].name = TSM.db.factionrealm.mats[matID].name or name
end
if isValid then
local players = TSM.db.factionrealm.crafts[spellID] and TSM.db.factionrealm.crafts[spellID].players or {}
players[playerName] = true
local queued = TSM.db.factionrealm.crafts[spellID] and TSM.db.factionrealm.crafts[spellID].queued or 0
local intermediateQueued = TSM.db.factionrealm.crafts[spellID] and TSM.db.factionrealm.crafts[spellID].intermediateQueued or nil
newCrafts[spellID] = {name=craftName, itemID=itemID, mats=mats, hasCD=hasCD, numResult=numMade, queued=queued, intermediateQueued=intermediateQueued, players=players, profession=currentTradeSkill}
end
end
end
self:Yield()
if currentTradeSkill ~= GetTradeSkillLine() or select(2, IsTradeSkillLinked()) ~= TSM.isSyncing.player then return end
end
-- search for and remove any spells that we can't craft anymore
for spellID, data in pairs(TSM.db.factionrealm.crafts) do
if data.profession == currentTradeSkill then
local hasCrafters = false
for player in pairs(data.players) do
if player ~= playerName or newCrafts[spellID] then
hasCrafters = true
break
end
end
if not hasCrafters then
TSM.db.factionrealm.crafts[spellID] = nil
end
end
end
-- save the new craft info
for spellID, data in pairs(newCrafts) do
TSM.db.factionrealm.crafts[spellID] = data
end
local playerName = select(2, IsTradeSkillLinked())
local skillName, level, maxLevel = GetTradeSkillLine()
TSM.db.factionrealm.tradeSkills[playerName] = TSM.db.factionrealm.tradeSkills[playerName] or {}
TSM.db.factionrealm.tradeSkills[playerName][skillName] = TSM.db.factionrealm.tradeSkills[playerName][skillName] or {}
TSM.db.factionrealm.tradeSkills[playerName][skillName].link = TSM.isSyncing.link
TSM.db.factionrealm.tradeSkills[playerName][skillName].accountKey = TSM.isSyncing.accountKey
TSM.db.factionrealm.tradeSkills[playerName][skillName].level = level
TSM.db.factionrealm.tradeSkills[playerName][skillName].maxLevel = maxLevel
end
function Util:GetSpellID(index)
local spellLink = GetTradeSkillRecipeLink(index)
if not spellLink then return end
return TSMAPI:GetItemID(spellLink)
end
function Util:FormatTime(seconds)
if seconds == 0 then return end
local hours = floor(seconds/3600)
local mins = floor((seconds%3600)/60)
local secs = seconds % 60
local str = ""
if hours > 0 then
str = str..format("%dh", hours)
end
if mins > 0 then
str = str..format("%dm", mins)
end
if secs > 0 then
str = str..format("%ds", secs)
end
return str
end
@@ -0,0 +1,312 @@
-- load the parent file (TSM) into a local variable
local TSM = select(2, ...)
TSM.VellumInfo = {
[7418] = 52510,
[7420] = 52510,
[7426] = 52510,
[7428] = 52510,
[7443] = 52510,
[7454] = 52510,
[7457] = 52510,
[7745] = 52511,
[7748] = 52510,
[7766] = 52510,
[7771] = 52510,
[7776] = 52510,
[7779] = 52510,
[7782] = 52510,
[7786] = 52511,
[7788] = 52511,
[7793] = 52511,
[7857] = 52510,
[7859] = 52510,
[7861] = 52510,
[7863] = 52510,
[7867] = 52510,
[13378] = 52510,
[13380] = 52511,
[13419] = 52510,
[13421] = 52510,
[13464] = 52510,
[13485] = 52510,
[13501] = 52510,
[13503] = 52511,
[13522] = 52510,
[13529] = 52511,
[13536] = 52510,
[13538] = 52510,
[13607] = 52510,
[13612] = 52510,
[13617] = 52510,
[13620] = 52510,
[13622] = 52510,
[13626] = 52510,
[13631] = 52510,
[13635] = 52510,
[13637] = 52510,
[13640] = 52510,
[13642] = 52510,
[13644] = 52510,
[13646] = 52510,
[13648] = 52510,
[13653] = 52511,
[13655] = 52511,
[13657] = 52510,
[13659] = 52510,
[13661] = 52510,
[13663] = 52510,
[13687] = 52510,
[13689] = 52510,
[13693] = 52511,
[13695] = 52511,
[13698] = 52510,
[13700] = 52510,
[13746] = 52510,
[13794] = 52510,
[13815] = 52510,
[13817] = 52510,
[13822] = 52510,
[13836] = 52510,
[13841] = 52510,
[13846] = 52510,
[13858] = 52510,
[13868] = 52510,
[13882] = 52510,
[13887] = 52510,
[13890] = 52510,
[13898] = 52511,
[13905] = 52510,
[13915] = 52511,
[13917] = 52510,
[13931] = 52510,
[13933] = 52510,
[13935] = 52510,
[13937] = 52511,
[13939] = 52510,
[13941] = 52510,
[13943] = 52511,
[13945] = 52510,
[13947] = 52510,
[13948] = 52510,
[20008] = 52510,
[20009] = 52510,
[20010] = 52510,
[20011] = 52510,
[20012] = 52510,
[20013] = 52510,
[20014] = 52510,
[20015] = 52510,
[20016] = 52510,
[20017] = 52510,
[20020] = 52510,
[20023] = 52510,
[20024] = 52510,
[20025] = 52510,
[20026] = 52510,
[20028] = 52510,
[20029] = 52511,
[20030] = 52511,
[20031] = 52511,
[20032] = 52511,
[20033] = 52511,
[20034] = 52511,
[20035] = 52511,
[20036] = 52511,
[21931] = 52511,
[22749] = 52511,
[22750] = 52511,
[23799] = 52511,
[23800] = 52511,
[23801] = 52510,
[23802] = 52510,
[23803] = 52511,
[23804] = 52511,
[25072] = 52510,
[25073] = 52510,
[25074] = 52510,
[25078] = 52510,
[25079] = 52510,
[25080] = 52510,
[25081] = 52510,
[25082] = 52510,
[25083] = 52510,
[25084] = 52510,
[25086] = 52510,
[27837] = 52511,
[27899] = 52510,
[27905] = 52510,
[27906] = 52510,
[27911] = 52510,
[27913] = 52510,
[27914] = 52510,
[27917] = 52510,
[27944] = 52510,
[27945] = 52510,
[27946] = 52510,
[27947] = 52510,
[27948] = 52510,
[27950] = 52510,
[27951] = 52510,
[27954] = 52510,
[27957] = 52510,
[27958] = 52510,
[27960] = 52510,
[27961] = 52510,
[27962] = 52510,
[27967] = 52511,
[27968] = 52511,
[27971] = 52511,
[27972] = 52511,
[27975] = 52511,
[27977] = 52511,
[27981] = 52511,
[27982] = 52511,
[27984] = 52511,
[28003] = 52511,
[28004] = 52511,
[33990] = 52510,
[33991] = 52510,
[33992] = 52510,
[33993] = 52510,
[33994] = 52510,
[33995] = 52510,
[33996] = 52510,
[33997] = 52510,
[33999] = 52510,
[34001] = 52510,
[34002] = 52510,
[34003] = 52510,
[34004] = 52510,
[34005] = 52510,
[34006] = 52510,
[34007] = 52510,
[34008] = 52510,
[34009] = 52510,
[34010] = 52511,
[42620] = 52511,
[42974] = 52511,
[44383] = 52510,
[44483] = 52510,
[44484] = 52510,
[44488] = 52510,
[44489] = 52510,
[44492] = 52510,
[44494] = 52510,
[44500] = 52510,
[44506] = 52510,
[44508] = 52510,
[44509] = 52510,
[44510] = 52511,
[44513] = 52510,
[44524] = 52511,
[44528] = 52510,
[44529] = 52510,
[44555] = 52510,
[44556] = 52510,
[44575] = 52510,
[44576] = 52511,
[44582] = 52510,
[44584] = 52510,
[44588] = 52510,
[44589] = 52510,
[44590] = 52510,
[44591] = 52510,
[44592] = 52510,
[44593] = 52510,
[44595] = 52511,
[44596] = 52510,
[44598] = 52510,
[44612] = 52510,
[44616] = 52510,
[44621] = 52511,
[44623] = 52510,
[44625] = 52510,
[44629] = 52511,
[44630] = 52511,
[44631] = 52510,
[44633] = 52511,
[44635] = 52510,
[46578] = 52511,
[46594] = 52510,
[47051] = 52510,
[47672] = 52510,
[47766] = 52510,
[47898] = 52510,
[47899] = 52510,
[47900] = 52510,
[47901] = 52510,
[59619] = 52511,
[59621] = 52511,
[59625] = 52511,
[60606] = 52510,
[60609] = 52510,
[60616] = 52510,
[60621] = 52511,
[60623] = 52510,
[60653] = 52510,
[60663] = 52510,
[60668] = 52510,
[60691] = 52511,
[60692] = 52510,
[60707] = 52511,
[60714] = 52511,
[60763] = 52510,
[60767] = 52510,
[62256] = 52510,
[62257] = 52511,
[62948] = 52511,
[62959] = 52511,
[63746] = 52510,
[64441] = 52511,
[64579] = 52511,
[71692] = 52510,
[968676] = 52511,
[968677] = 52511,
[968678] = 52511,
[968679] = 52511,
[968680] = 52511,
[968681] = 52511,
[968682] = 52511,
[968683] = 52511,
[968684] = 52511,
[968685] = 52511,
[968686] = 52511,
[968687] = 52511,
[968688] = 52511,
[968689] = 52511,
[968690] = 52511,
[968691] = 52511,
[968692] = 52511,
[968693] = 52511,
[968694] = 52511,
[968695] = 52511,
[968696] = 52511,
[968697] = 52511,
[968698] = 52511,
[968699] = 52511,
[968700] = 52511,
[968701] = 52511,
[968702] = 52511,
[968770] = 52511,
[968771] = 52511,
[1968677] = 52511,
[1968678] = 52511,
[1968680] = 52511,
[1968681] = 52511,
[1968683] = 52511,
[1968684] = 52511,
[1968686] = 52511,
[1968687] = 52511,
[1968689] = 52511,
[1968690] = 52511,
[1968692] = 52511,
[1968693] = 52511,
[1968695] = 52511,
[1968696] = 52511,
[1968698] = 52511,
[1968699] = 52511,
[1968701] = 52511,
[1968702] = 52511,
[1968770] = 52511,
[1968771] = 52511}
@@ -0,0 +1,361 @@
-- ------------------------------------------------------------------------------ --
-- TradeSkillMaster_Crafting --
-- http://www.curse.com/addons/wow/tradeskillmaster_crafting --
-- --
-- A TradeSkillMaster Addon (http://tradeskillmaster.com) --
-- All Rights Reserved* - Detailed license information included with addon. --
-- ------------------------------------------------------------------------------ --
-- register this file with Ace Libraries
local TSM = select(2, ...)
TSM = LibStub("AceAddon-3.0"):NewAddon(TSM, "TSM_Crafting", "AceEvent-3.0", "AceConsole-3.0")
local L = LibStub("AceLocale-3.0"):GetLocale("TradeSkillMaster_Crafting") -- loads the localization table
-- default values for the savedDB
local savedDBDefaults = {
global = {
optionsTreeStatus = {},
tooltip = true,
materialTooltip = true,
ignoreCharacters = {},
ignoreGuilds = {},
profitPercent = 0,
defaultMatCostMethod = "min(dbmarket, crafting, vendorbuy, convert(dbmarket))",
defaultCraftPriceMethod = "dbminbuyout",
priceColumn = 1,
ignoreCDCraftCost = true,
neverCraftInks = true,
frameQueueOpen = nil,
showingDefaultFrame = nil,
matsInTooltip = true,
},
factionrealm = {
tradeSkills = {},
crafts = {},
mats = {},
queueStatus = { collapsed = {} },
sourceStatus = { collapsed = {} },
gathering = { crafter = nil, professions = {}, neededMats = {}, availableMats = {}, gatheredMats = false, gatherAll = false, destroyingMats = {}, destroyDisable = false, evenStacks = true },
craftingCostCache = {}
},
}
-- Called once the player has loaded WOW.
function TSM:OnEnable()
-- create shortcuts to TradeSkillMaster_Crafting's modules
for moduleName, module in pairs(TSM.modules) do
TSM[moduleName] = module
end
-- load the savedDB into TSM.db
TSM.db = LibStub:GetLibrary("AceDB-3.0"):New("TradeSkillMaster_CraftingDB", savedDBDefaults, true)
TSM:UpdateCraftReverseLookup()
-- register this module with TSM
TSM:RegisterModule()
-- fix vellum issue
for spellid, data in pairs(TSM.db.factionrealm.crafts) do
for itemString in pairs(data.mats) do
if itemString == "item:52510" then
TSM.db.factionrealm.crafts[spellid].mats["item:52510:0:0:0:0:0:0"] = 1
TSM.db.factionrealm.crafts[spellid].mats[itemString] = nil
elseif itemString == "item:52511" then
TSM.db.factionrealm.crafts[spellid].mats["item:52511:0:0:0:0:0:0"] = 1
TSM.db.factionrealm.crafts[spellid].mats[itemString] = nil
end
end
end
if TSM.db.factionrealm.mats["item:52510"] then
local name = TSMAPI:GetSafeItemInfo("item:52510:0:0:0:0:0:0") or nil
TSM.db.factionrealm.mats["item:52510:0:0:0:0:0:0"] = {}
TSM.db.factionrealm.mats["item:52510:0:0:0:0:0:0"].name = name
TSM.db.factionrealm.mats["item:52510"] = nil
end
if TSM.db.factionrealm.mats["item:52511"] then
local name = TSMAPI:GetSafeItemInfo("item:52511:0:0:0:0:0:0") or nil
TSM.db.factionrealm.mats["item:52511:0:0:0:0:0:0"] = {}
TSM.db.factionrealm.mats["item:52511:0:0:0:0:0:0"].name = name
TSM.db.factionrealm.mats["item:52511"] = nil
end
local func, err = TSMAPI:ParseCustomPrice(TSM.db.global.defaultCraftPriceMethod, "crafting")
if not func then
TSM:Printf(L["Your default craft value method was invalid so it has been returned to the default. Details: %s"], err)
TSM.db.global.defaultCraftPriceMethod = savedDBDefaults.defaultCraftPriceMethod
end
for name, operation in pairs(TSM.operations) do
if operation.craftPriceMethod then
local func, err = TSMAPI:ParseCustomPrice(TSM.db.global.defaultCraftPriceMethod, "crafting")
if not func then
TSM:Printf(L["Your craft value method for '%s' was invalid so it has been returned to the default. Details: %s"], name, err)
operation.craftPriceMethod = TSM.operationDefaults.craftPriceMethod
end
end
end
end
-- registers this module with TSM by first setting all fields and then calling TSMAPI:NewModule().
function TSM:RegisterModule()
TSM.icons = { { side = "module", desc = "Crafting", slashCommand = "crafting", callback = "Options:LoadCrafting", icon = "Interface\\Icons\\INV_Misc_Gear_08" } }
TSM.operations = { maxOperations = 1, callbackOptions = "Options:Load", callbackInfo = "GetOperationInfo" }
TSM.priceSources = {
{ key = "Crafting", label = L["Crafting Cost"], callback = "GetCraftingCost" },
{ key = "matPrice", label = L["Crafting Material Cost"], callback = "GetCraftingMatCost" },
}
TSM.moduleAPIs = {
{ key = "addQueue", callback = "Queue:addQueue" },
{ key = "removeQueue", callback = "Queue:removeQueue" },
{ key = "getQueue", callback = "Queue:getQueue" },
{ key = "getCDCrafts", callback = "getCDCrafts" },
{ key = "getCraftingFrameStatus", callback = "CraftingGUI:GetStatus" },
}
TSM.tooltipOptions = { callback = "Options:LoadTooltipOptions" }
TSM.slashCommands = {
{ key = "profession", label = L["Opens the Crafting window to the first profession."], callback = "CraftingGUI:OpenFirstProfession" },
{ key = "restock_help", label = "Tells you why a specific item is not being restocked and added to the queue.", callback = "RestockHelp" },
}
TSM.sync = { callback = "Sync:Callback" }
TSMAPI:NewModule(TSM)
end
TSM.operationDefaults = {
minRestock = 1, -- min of 1
maxRestock = 3, -- max of 3
minProfit = 1000000,
craftPriceMethod = nil,
ignorePlayer = {},
ignoreFactionrealm = {},
relationships = {},
}
function TSM:GetOperationInfo(name)
TSMAPI:UpdateOperation("Crafting", name)
local operation = TSM.operations[name]
if not operation then return end
if operation.minProfit then
return format(L["Restocking to a max of %d (min of %d) with a min profit."], operation.maxRestock, operation.minRestock)
else
return format(L["Restocking to a max of %d (min of %d) with no min profit."], operation.maxRestock, operation.minRestock)
end
end
function TSM:GetTooltip(itemString)
if not TSM.db.global.tooltip then return end
local text = {}
local moneyCoinsTooltip = TSMAPI:GetMoneyCoinsTooltip()
TSM:UpdateCraftReverseLookup()
itemString = TSMAPI:GetBaseItemString(itemString) -- show craft costs against random enchants
if TSM.craftReverseLookup[itemString] then
if TSM.db.global.tooltip then
local spellID, cost, buyout, profit = TSM.Cost:GetLowestCraftPrices(itemString)
local color
if profit and profit < 0 then
color = "|cffff0000"
else
color = "|cff00ff00"
end
if cost then
local costText, profitText
if moneyCoinsTooltip then
costText = (TSMAPI:FormatTextMoneyIcon(cost, "|cffffffff", true) or "|cffffffff---|r")
profitText = (TSMAPI:FormatTextMoneyIcon(profit, color, true) or "|cffffffff---|r")
else
costText = (TSMAPI:FormatTextMoney(cost, "|cffffffff", true) or "|cffffffff---|r")
profitText = (TSMAPI:FormatTextMoney(profit, color, true) or "|cffffffff---|r")
end
if profit then
local profitPercent = profit / cost * 100
local profitPercText = format("%s%.0f%%|r",color, profitPercent)
if profit>0 then
tinsert(text, { left = " " .. L["Crafting Cost"], right = format("%s (%s | %s profit)", costText, profitText, profitPercText) })
else
tinsert(text, { left = " " .. L["Crafting Cost"], right = format("%s (%s | %s loss)", costText, profitText, profitPercText) })
end
else
-- tinsert(text, { left = " " .. L["Crafting Cost"], right = format(L["%s (%s profit)"], costText, profitText) })
tinsert(text, { left = " " .. L["Crafting Cost"], right = format("%s", costText) })
end
if TSM.db.global.matsInTooltip and TSM.db.factionrealm.crafts[spellID] then
for matItemString, matQuantity in pairs(TSM.db.factionrealm.crafts[spellID].mats) do
local name, _, quality = TSMAPI:GetSafeItemInfo(matItemString)
if name then
local mat = TSM.db.factionrealm.mats[matItemString]
if mat then
local cost = TSM:GetCustomPrice(mat.customValue or TSM.db.global.defaultMatCostMethod, matItemString)
if cost then
-- local colorName = format("|c%s%s%s%s|r",select(4,GetItemQualityColor(quality)),name, " x ", matQuantity)
local colorName = format("%s%s%s%s|r",select(4,GetItemQualityColor(quality)), name, " x ", matQuantity)
if matQuantity > 1 then
if moneyCoinsTooltip then
tinsert(text, { left = " " .. colorName, right = "ea: "..TSMAPI:FormatTextMoneyIcon(cost, "|cffffffff", true).." | total: "..TSMAPI:FormatTextMoneyIcon(cost*matQuantity, "|cffffffff", true)})
else
tinsert(text, { left = " " .. colorName, right = "ea: "..TSMAPI:FormatTextMoney(cost, "|cffffffff", true).." | total: "..TSMAPI:FormatTextMoney(cost*matQuantity, "|cffffffff", true)})
end
else
if moneyCoinsTooltip then
tinsert(text, { left = " " .. colorName, right = TSMAPI:FormatTextMoneyIcon(cost*matQuantity, "|cffffffff", true) })
else
tinsert(text, { left = " " .. colorName, right = TSMAPI:FormatTextMoney(cost*matQuantity, "|cffffffff", true) })
end
end
end
end
end
end
end
end
end
end
if TSM.db.global.materialTooltip then
local mat = TSM.db.factionrealm.mats[itemString]
if mat then
local cost = TSM:GetCustomPrice(mat.customValue or TSM.db.global.defaultMatCostMethod, itemString)
if cost then
local costText
if moneyCoinsTooltip then
costText = (TSMAPI:FormatTextMoneyIcon(cost, "|cffffffff", true) or "|cffffffff---|r")
else
costText = (TSMAPI:FormatTextMoney(cost, "|cffffffff", true) or "|cffffffff---|r")
end
tinsert(text, { left = " " .. L["Mat Cost"], right = format("%s", costText) })
end
end
end
if #text > 0 then
tinsert(text, 1, "|cffffff00" .. "TSM Crafting:")
return text
end
end
function TSM:GetCraftingCost(link)
link = select(2, TSMAPI:GetSafeItemInfo(link))
local itemString = TSMAPI:GetBaseItemString(link)
if not itemString then return end
TSM:UpdateCraftReverseLookup()
local _, cost = TSM.Cost:GetLowestCraftPrices(itemString)
if cost then
TSM.db.factionrealm.craftingCostCache[itemString] = cost
end
return TSM.db.factionrealm.craftingCostCache[itemString]
end
function TSM:GetCraftingMatCost(link)
link = select(2, TSMAPI:GetSafeItemInfo(link))
local itemString = TSMAPI:GetBaseItemString(link)
if not itemString then return end
TSM:UpdateCraftReverseLookup()
return TSM.Cost:GetMatCost(itemString)
end
local reverseLookupUpdate = 0
function TSM:UpdateCraftReverseLookup()
-- if reverseLookupUpdate >= time() - 30 then return end
reverseLookupUpdate = time()
TSM.craftReverseLookup = {}
for spellID, data in pairs(TSM.db.factionrealm.crafts) do
TSM.craftReverseLookup[data.itemID] = TSM.craftReverseLookup[data.itemID] or {}
tinsert(TSM.craftReverseLookup[data.itemID], spellID)
end
end
function TSM:GetCustomPrice(priceMethod, itemString)
local func = TSMAPI:ParseCustomPrice(priceMethod)
return func and func(itemString)
end
function TSM:getCDCrafts()
local crafts = {}
for spellID, data in pairs(TSM.db.factionrealm.crafts) do
if data.hasCD then
crafts[spellID] = data.name
end
end
return crafts
end
function TSM:RestockHelp(link)
local itemString = TSMAPI:GetItemString(link)
if not itemString then
return print("No item specified. Usage: /tsm restock_help [ITEM_LINK]")
end
TSM:Printf("Restock help for %s:", link)
-- check if the item is in a group
local groupPath = TSMAPI:GetGroupPath(itemString)
if not groupPath then
return print("This item is not in a TSM group.")
end
-- check that there's a crafting operation applied
local operation = (TSMAPI:GetItemOperation(itemString, "Crafting") or {})[1]
if not operation then
return print(format("There is no TSM_Crafting operation applied to this item's TSM group (%s).", TSMAPI:FormatGroupPath(groupPath)))
end
-- check if it's an invalid operation
local opSettings = TSM.operations[operation]
if opSettings.minRestock > opSettings.maxRestock then
return print(format(L["'%s' is an invalid operation! Min restock of %d is higher than max restock of %d."], operation, opSettings.minRestock, opSettings.maxRestock))
end
-- check that this item is craftable
TSM:UpdateCraftReverseLookup()
local spellID = TSM.craftReverseLookup[itemString] and TSM.craftReverseLookup[itemString][1]
if not spellID or not TSM.db.factionrealm.crafts[spellID] then
return print("You don't know how to craft this item.")
end
-- check the restock quantity
local numHave = TSM.Inventory:GetTotalQuantity(itemString)
if numHave >= opSettings.maxRestock then
return print(format("You already have at least your max restock quantity of this item. You have %d and the max restock quantity is %d", numHave, opSettings.maxRestock))
elseif (opSettings.maxRestock - numHave) < opSettings.minRestock then
return print(format("The number which would be queued (%d) is less than the min restock quantity (%d).", (opSettings.maxRestock - numHave), opSettings.minRestock))
end
-- check the prices on the item and the min profit
if opSettings.minProfit then
local cheapestSpellID, cost, craftedValue, profit = TSM.Cost:GetLowestCraftPrices(itemString)
-- check that there's a crafted value
if not craftedValue then
local craftPriceMethod = operation and operation.craftPriceMethod or TSM.db.global.defaultCraftPriceMethod
return print(format("The 'Craft Value Method' (%s) did not return a value for this item. If it is based on some price database (AuctionDB, TSM_WoWuction, TUJ, etc), then ensure that you have scanned for or downloaded the data as appropriate.", craftPriceMethod))
end
-- check that there's a crafted cost
if not cost then
return print("This item does not have a crafting cost. Check that all of its mats have mat prices. If the mat prices are based on some price database (AuctionDB, TSM_WoWuction, TUJ, etc), then ensure that you have scanned for or downloaded the data as appropriate.")
end
-- check that there's a profit
if not profit then
return print("There is a crafting cost and crafted item value, but TSM_Crafting wasn't able to calculate a profit. This shouldn't happen!")
end
local minProfit = TSM:GetCustomPrice(opSettings.minProfit, itemString)
if not minProfit then
return print(format("The min profit (%s) did not evalulate to a valid value for this item.", opSettings.minProfit))
end
if profit < minProfit then
return print(format("The profit of this item (%s) is below the min profit (%s).", TSMAPI:FormatTextMoney(profit), TSMAPI:FormatTextMoney(minProfit)))
end
end
print("This item will be added to the queue when you restock its group. If this isn't happening, make a post on the TSM forums with a screenshot of the item's tooltip, operation settings, and your general TSM_Crafting options.")
end
@@ -0,0 +1,32 @@
## Interface: 30300
## Title: |cff00ff00TradeSkillMaster_Crafting|r
## Notes: Provides a rich profession interface complete with a powerful crafting queue.
## Author: Sapu94, Bart39
## Version: v2.5.2
## SavedVariables: TradeSkillMaster_CraftingDB
## Dependency: TradeSkillMaster, TradeSkillMaster_ItemTracker
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_Crafting.lua
Modules\Cost.lua
Modules\Inventory.lua
Modules\CraftingGUI.lua
Modules\Util.lua
Modules\Queue.lua
Modules\Options.lua
Modules\EnchantingInfo.lua
Modules\Gather.lua
Modules\Sync.lua
Modules\SpellNames2IDs.lua
Modules\VellumInfo.lua