96 lines
3.3 KiB
Lua
96 lines
3.3 KiB
Lua
-- ------------------------------------------------------------------------------ --
|
|
-- TradeSkillMaster --
|
|
-- https://tradeskillmaster.com --
|
|
-- All Rights Reserved - Detailed license information included with addon. --
|
|
-- ------------------------------------------------------------------------------ --
|
|
|
|
local _, TSM = ...
|
|
local Crafting = TSM.Tooltip:NewPackage("Crafting")
|
|
local L = TSM.Include("Locale").GetTable()
|
|
local ItemString = TSM.Include("Util.ItemString")
|
|
local Theme = TSM.Include("Util.Theme")
|
|
local private = {}
|
|
|
|
|
|
|
|
-- ============================================================================
|
|
-- Module Functions
|
|
-- ============================================================================
|
|
|
|
function Crafting.OnInitialize()
|
|
TSM.Tooltip.Register(TSM.Tooltip.CreateInfo()
|
|
:SetHeadings(L["TSM Crafting"])
|
|
:SetSettingsModule("Crafting")
|
|
:AddSettingEntry("craftingCost", true, private.PopulateCostLine)
|
|
:AddSettingEntry("detailedMats", false, private.PopulateDetailedMatsLines)
|
|
:AddSettingEntry("matPrice", false, private.PopulateMatPriceLine)
|
|
)
|
|
end
|
|
|
|
|
|
|
|
-- ============================================================================
|
|
-- Private Helper Functions
|
|
-- ============================================================================
|
|
|
|
function private.PopulateCostLine(tooltip, itemString)
|
|
itemString = itemString and ItemString.GetBaseFast(itemString)
|
|
assert(itemString)
|
|
local cost, profit = nil, nil
|
|
if itemString == ItemString.GetPlaceholder() then
|
|
-- example tooltip
|
|
cost = 55
|
|
profit = 20
|
|
elseif not TSM.Crafting.CanCraftItem(itemString) then
|
|
return
|
|
else
|
|
cost = TSM.Crafting.Cost.GetLowestCostByItem(itemString)
|
|
local buyout = cost and TSM.Crafting.Cost.GetCraftedItemValue(itemString) or nil
|
|
profit = buyout and (buyout - cost) or nil
|
|
end
|
|
|
|
local costText = tooltip:FormatMoney(cost)
|
|
local profitText = tooltip:FormatMoney(profit, profit and Theme.GetFeedbackColor(profit >= 0 and "GREEN" or "RED") or nil)
|
|
tooltip:AddLine(L["Crafting Cost"], format(L["%s (%s profit)"], costText, profitText))
|
|
end
|
|
|
|
function private.PopulateDetailedMatsLines(tooltip, itemString)
|
|
itemString = itemString and ItemString.GetBaseFast(itemString)
|
|
assert(itemString)
|
|
if itemString == ItemString.GetPlaceholder() then
|
|
-- example tooltip
|
|
tooltip:StartSection()
|
|
tooltip:AddSubItemValueLine(ItemString.GetPlaceholder(), 11, 5)
|
|
tooltip:EndSection()
|
|
return
|
|
elseif not TSM.Crafting.CanCraftItem(itemString) then
|
|
return
|
|
end
|
|
|
|
local _, spellId = TSM.Crafting.Cost.GetLowestCostByItem(itemString)
|
|
if not spellId then
|
|
return
|
|
end
|
|
|
|
tooltip:StartSection()
|
|
local numResult = TSM.Crafting.GetNumResult(spellId)
|
|
for _, matItemString, matQuantity in TSM.Crafting.MatIterator(spellId) do
|
|
tooltip:AddSubItemValueLine(matItemString, TSM.Crafting.Cost.GetMatCost(matItemString), matQuantity / numResult)
|
|
end
|
|
tooltip:EndSection()
|
|
end
|
|
|
|
function private.PopulateMatPriceLine(tooltip, itemString)
|
|
itemString = itemString and ItemString.GetBase(itemString) or nil
|
|
local matCost = nil
|
|
if itemString == ItemString.GetPlaceholder() then
|
|
-- example tooltip
|
|
matCost = 17
|
|
else
|
|
matCost = TSM.Crafting.Cost.GetMatCost(itemString)
|
|
end
|
|
if matCost then
|
|
tooltip:AddItemValueLine(L["Material Cost"], matCost)
|
|
end
|
|
end
|