vanilla-wow-addons – Rev 1
?pathlinks?
DurabilityFu = AceLibrary("AceAddon-2.0"):new("FuBarPlugin-2.0", "AceDB-2.0", "AceEvent-2.0", "AceHook-2.0", "AceConsole-2.0")
DurabilityFu:RegisterDB("DurabilityFuDB")
DurabilityFu:RegisterDefaults('profile', {
showPopup = true,
showMan = false,
showAverage = false,
showHealthy = true,
popupX = 0,
popupY = -200,
autoRepairEquipment = false,
autoRepairInventory = false,
})
DurabilityFu.version = "2.0." .. string.sub("$Revision: 9763 $", 12, -3)
DurabilityFu.date = string.sub("$Date: 2006-09-01 11:45:46 -1000 (Fri, 01 Sep 2006) $", 8, 17)
DurabilityFu.hasIcon = true
DurabilityFu.canHideText = true
local L = AceLibrary("AceLocale-2.0"):new("FuBar_DurabilityFu")
local Gratuity = AceLibrary("Gratuity-2.0")
local Tablet = AceLibrary("Tablet-2.0")
local Abacus = AceLibrary("Abacus-2.0")
local Crayon = AceLibrary("Crayon-2.0")
local TEXT_SERGEANT, TEXT_HONORED
if AceLibrary("AceDB-2.0").FACTION == FACTION_HORDE then
TEXT_SERGEANT = PVP_RANK_7_0
else
TEXT_SERGEANT = PVP_RANK_7_1
end
TEXT_HONORED = FACTION_STANDING_LABEL6
function DurabilityFu:IsShowingPopup()
return self.db.profile.showPopup
end
function DurabilityFu:ToggleShowingPopup()
self.db.profile.showPopup = not self.db.profile.showPopup
end
function DurabilityFu:IsAutoRepairingEquipment()
return self.db.profile.autoRepairEquipment
end
function DurabilityFu:ToggleAutoRepairingEquipment()
self.db.profile.autoRepairEquipment = not self.db.profile.autoRepairEquipment
end
function DurabilityFu:IsAutoRepairingInventory()
return self.db.profile.autoRepairInventory
end
function DurabilityFu:ToggleAutoRepairingInventory()
self.db.profile.autoRepairInventory = not self.db.profile.autoRepairInventory
end
function DurabilityFu:IsShowingMan()
return self.db.profile.showMan
end
function DurabilityFu:ToggleShowingMan()
self.db.profile.showMan = not self.db.profile.showMan
--[[ if self.db.profile.showMan and self.manX ~= nil and self.manY ~= nil then
DurabilityFrame:ClearAllPoints()
DurabilityFrame:SetPoint("TOPRIGHT", UIParent, "TOPRIGHT", self.manX, self.manY)
elseif DurabilityFrame:GetRight() ~= nil and DurabilityFrame:GetTop() ~= nil then
self.manX = DurabilityFrame:GetRight() - GetScreenWidth()
self.manY = DurabilityFrame:GetTop() - GetScreenHeight()
DurabilityFrame:ClearAllPoints()
DurabilityFrame:SetPoint("TOPRIGHT", UIParent, "TOPRIGHT", self.manX + 3000, self.manY + 3000)
end]]
DurabilityFrame_SetAlerts()
end
function DurabilityFu:IsShowingAverage()
return self.db.profile.showAverage
end
function DurabilityFu:ToggleShowingAverage()
self.db.profile.showAverage = not self.db.profile.showAverage
self:Update()
end
function DurabilityFu:IsShowingHealthyItems()
return self.db.profile.showHealthy
end
function DurabilityFu:ToggleShowingHealthyItems()
self.db.profile.showHealthy = not self.db.profile.showHealthy
self:UpdateTooltip()
end
function DurabilityFu:OnEnable()
self.repairIndex = 0
self.repairMoney = 0
self.itemStatus = {
{ value = 0, max = 0, cost = 0, name = INVTYPE_HEAD, slot = "Head" },
{ value = 0, max = 0, cost = 0, name = INVTYPE_SHOULDER, slot = "Shoulder" },
{ value = 0, max = 0, cost = 0, name = INVTYPE_CHEST, slot = "Chest" },
{ value = 0, max = 0, cost = 0, name = INVTYPE_WAIST, slot = "Waist" },
{ value = 0, max = 0, cost = 0, name = INVTYPE_LEGS, slot = "Legs" },
{ value = 0, max = 0, cost = 0, name = INVTYPE_FEET, slot = "Feet" },
{ value = 0, max = 0, cost = 0, name = INVTYPE_WRIST, slot = "Wrist" },
{ value = 0, max = 0, cost = 0, name = INVTYPE_HAND, slot = "Hands" },
{ value = 0, max = 0, cost = 0, name = INVTYPE_WEAPONMAINHAND, slot = "MainHand" },
{ value = 0, max = 0, cost = 0, name = INVTYPE_WEAPONOFFHAND, slot = "SecondaryHand" },
{ value = 0, max = 0, cost = 0, name = INVTYPE_RANGED, slot = "Ranged" },
{ value = 0, max = 0, cost = 0, name = INVENTORY_TOOLTIP },
}
self:RegisterEvent("PLAYER_UNGHOST", "OnBagUpdate")
self:RegisterEvent("PLAYER_DEAD", "OnBagUpdate")
self:RegisterEvent("PLAYER_REGEN_ENABLED", "OnBagUpdate")
self:RegisterEvent("PLAYER_ENTERING_WORLD")
self:RegisterEvent("UPDATE_INVENTORY_ALERTS")
self:RegisterEvent("MERCHANT_SHOW")
self:RegisterEvent("MERCHANT_CLOSED")
self:RegisterEvent("FACTION_UPDATE")
self:Hook("DurabilityFrame_SetAlerts")
DurabilityFrame_SetAlerts()
end
function DurabilityFu:OnDisable()
StaticPopup_Hide("BOSSPANEL_DURABILITY_POPUP")
if not self.db.profile.showMan then
self:ToggleShowingMan()
self.db.profile.showMan = false
end
end
local options = {
type = 'group',
args = {
popup = {
type = 'toggle',
name = L["Show repair popup at vendor"],
desc = L["Toggle whether to show the popup at the merchant window"],
get = "IsShowingPopup",
set = "ToggleShowingPopup",
},
showMan = {
type = 'toggle',
name = L["Show the armored man"],
desc = L["Toggle whether to show Blizzard's armored man"],
get = "IsShowingMan",
set = "ToggleShowingMan",
},
average = {
type = 'toggle',
name = L["Show average value"],
desc = L["Toggle whether to show your average or minimum durability"],
get = "IsShowingAverage",
set = "ToggleShowingAverage",
},
healthy = {
type = 'toggle',
name = L["Show healthy items"],
desc = L["Toggle whether to show items that are healthy (100% repaired)"],
get = "IsShowingHealthyItems",
set = "ToggleShowingHealthyItems",
},
autoRepair = {
type = 'group',
name = L["Auto repair"],
desc = L["Auto repair"],
args = {
equipment = {
type = 'toggle',
name = L["Equipment"],
desc = L["Equipment"],
get = "IsAutoRepairingEquipment",
set = "ToggleAutoRepairingEquipment",
},
inventory = {
type = 'toggle',
name = L["Inventory"],
desc = L["Inventory"],
get = "IsAutoRepairingInventory",
set = "ToggleAutoRepairingInventory",
},
}
},
},
handler = DurabilityFu,
}
DurabilityFu:RegisterChatCommand(L["AceConsole-Commands"], options)
DurabilityFu.OnMenuRequest = options
function DurabilityFu:PLAYER_ENTERING_WORLD()
if not self.isHonored then
for i = 1, GetNumFactions() do
local _, _, standing = GetFactionInfo(i)
if standing >= 6 then
self.isHonored = true
break
end
end
end
if not self.isSergeant then
local _, rankNumber = GetPVPRankInfo(UnitPVPRank("player"))
if rankNumber >= 3 then
self.isSergeant = true
end
end
end
function DurabilityFu:FACTION_UPDATE()
if GetNumFactions() > 0 and not self.isHonored then
for i = 1, GetNumFactions() do
local _, _, standing = GetFactionInfo(i)
if standing >= 6 then
self.isHonored = true
break
end
end
self:UnregisterEvent("FACTION_UPDATE")
elseif self.isHonored then
self:UnregisterEvent("FACTION_UPDATE")
end
end
local lastUpdate
function DurabilityFu:UpdateBagData()
if lastUpdate and GetTime() - lastUpdate < 1 then
return
end
lastUpdate = GetTime()
local minStatus = 1.0
local minValue = 0
local minMax = 0
self.itemStatus[12].value = 0
self.itemStatus[12].max = 0
self.itemStatus[12].cost = 0
for bag = 0, 4 do
for slot = 1, GetContainerNumSlots(bag) do
local status, value, max, cost = self:GetStatus(slot, bag)
if not self:IsShowingAverage() then
if status ~= nil and status < minStatus then
minStatus = status
minValue = value
minMax = max
if (self.repairIndex == 0 or status < self:GetPercent(self.itemStatus[self.repairIndex].value, self.itemStatus[self.repairIndex].max)) and max ~= 0 then
self.repairIndex = 12
end
self.itemStatus[12].value = value
self.itemStatus[12].max = max
end
elseif cost ~= nil then
self.itemStatus[12].value = self.itemStatus[12].value + value
self.itemStatus[12].max = self.itemStatus[12].max + max
end
if cost ~= nil then
self.itemStatus[12].cost = self.itemStatus[12].cost + cost
end
end
end
if self:IsShowingAverage() then
local status = self:GetPercent(self.itemStatus[12].value, self.itemStatus[12].max)
if (self.repairIndex == 0 or status < self:GetPercent(self.itemStatus[self.repairIndex].value, self.itemStatus[self.repairIndex].max)) and self.itemStatus[12].max ~= 0 then
self.repairIndex = 12
end
end
end
function DurabilityFu:OnBagUpdate()
self:UpdateBagData()
self:UpdateText()
self:UpdateTooltip()
end
local lastUpdate
function DurabilityFu:UpdateInventoryData(toCheck)
if lastUpdate and GetTime() - lastUpdate < 1 then
return
end
lastUpdate = GetTime()
if toCheck == nil then
toCheck = {}
for i = 1, 11 do
toCheck[i] = true
end
end
local minStatus = 1.0
local minValue = 0
local minMax = 0
local minIndex = 0
for index,_ in toCheck do
local status, value, max, cost = self:GetStatus(index)
if status ~= nil and status < minStatus then
minStatus = status
minValue = value
minMax = max
minIndex = index
end
self.itemStatus[index].value = value or 0
self.itemStatus[index].max = max or 0
self.itemStatus[index].cost = cost or 0
end
self.repairIndex = minIndex
if not self:IsShowingMan() then
self.db.profile.showMan = true
self:ToggleShowingMan()
end
end
function DurabilityFu:UPDATE_INVENTORY_ALERTS()
self:UpdateInventoryData(INVENTORY_ALERT_STATUS_SLOTS)
self:UpdateText()
self:UpdateTooltip()
end
function DurabilityFu:MERCHANT_SHOW()
local dirty = false
local stop = false
if CanMerchantRepair() then
if self:IsAutoRepairingEquipment() then
local repairCost = GetRepairAllCost()
local money = GetMoney()
if money < repairCost then
self:Print("Cannot auto-repair equipment. Your money: %s. Needed: %s", Abacus:FormatMoneyFull(money, true), Abacus:FormatMoneyFull(repairCost, true))
stop = true
elseif repairCost > 0 then
RepairAllItems()
self:Print("Auto-repaired equipment: %s", Abacus:FormatMoneyFull(repairCost))
dirty = true
else
self:Print("No equipment to auto-repair")
end
end
if not stop and self:IsAutoRepairingInventory() then
local repairCost = self:CalculateInventoryCost()
local money = GetMoney()
if money < repairCost then
self:Print("Cannot auto-repair inventory. Your money: %s. Needed: %s", Abacus:FormatMoneyFull(money, true), Abacus:FormatMoneyFull(repairCost, true))
elseif repairCost > 0 then
ShowRepairCursor()
for bag = 0, 4 do
for slot = 1, GetContainerNumSlots(bag) do
local _,repairCost = Gratuity:SetBagItem(bag, slot)
if repairCost ~= nil and repairCost > 0 then
PickupContainerItem(bag, slot)
end
end
end
HideRepairCursor()
self:Print("Auto-repaired inventory: %s", Abacus:FormatMoneyFull(repairCost))
dirty = true
else
self:Print("No items in inventory to auto-repair")
end
end
end
self.merchantShown = true
if self:IsShowingPopup() then
local canRepair, repairCost = CanMerchantRepair(), GetRepairAllCost()
if canRepair then
repairCost = repairCost + self:CalculateInventoryCost()
if repairCost > 0 then
if dirty then
self:ScheduleEvent(self.OpenPopup, 1, self)
else
self:OpenPopup()
end
end
end
end
self:ScheduleRepeatingEvent(self.name, self.OnUpdate, 1, self)
self.updateNum = nil
self:Update()
end
function DurabilityFu:MERCHANT_CLOSED()
self.merchantShown = false
self:ClosePopup()
self:ScheduleRepeatingEvent(self.name, self.OnUpdate, 1, self)
self.updateNum = nil
self:Update()
end
function DurabilityFu:CalculateInventoryCost()
local result = 0
for bag = 0, 4 do
for slot = 1, GetContainerNumSlots(bag) do
local _,repairCost = Gratuity:SetBagItem(bag, slot)
if repairCost ~= nil and repairCost > 0 then
result = result + repairCost
end
end
end
return result
end
function DurabilityFu:GetPercent(quotient, denominator)
if denominator ~= 0 then
return quotient / denominator
else
return 1
end
end
function DurabilityFu:GetStatus(index, bag)
local value = 0
local max = 0
local cost = 0
local hasItem, repairCost
if bag ~= nil then
_,repairCost = Gratuity:SetBagItem(bag, index)
hasItem = GetContainerItemInfo(bag, index) ~= nil
else
local slotName = self.itemStatus[index].slot .. "Slot"
local id = GetInventorySlotInfo(slotName)
hasItem,_,repairCost = Gratuity:SetInventoryItem("player", id)
end
if hasItem then
if repairCost ~= nil then
cost = repairCost
end
local value, max = Gratuity:FindDeformat(DURABILITY_TEMPLATE, nil, nil, nil, true)
if value then
value = tonumber(value)
max = tonumber(max)
return self:GetPercent(value, max), value, max, cost
end
end
end
function DurabilityFu:OnDataUpdate()
self:UpdateBagData()
self:UpdateInventoryData()
end
function DurabilityFu:OnTextUpdate()
local percent
if not self:IsShowingAverage() then
if self.repairIndex == 0 then
percent = 1
else
percent = self:GetPercent(self.itemStatus[self.repairIndex].value, self.itemStatus[self.repairIndex].max)
end
else
local value = 0
local max = 0
for i,item in self.itemStatus do
if i ~= 12 then
value = value + item.value
max = max + item.max
end
end
percent = self:GetPercent(value, max)
end
self:SetText(string.format("|cff%s%d%%|r", Crayon:GetThresholdHexColor(percent), percent * 100))
end
function DurabilityFu:OnTooltipUpdate()
local cost = 0
local cat = Tablet:AddCategory(
'columns', 3,
'child_textR', 1,
'child_textG', 1,
'child_textB', 0
)
for index, item in self.itemStatus do
if item.max > 0 then
cost = cost + item.cost
local percent = self:GetPercent(item.value, item.max)
if self:IsShowingHealthyItems() or percent < 1 then
local r, g, b = Crayon:GetThresholdColor(percent)
cat:AddLine(
'text', item.name,
'text2', string.format("%.0f%%", percent * 100),
'text2R', r,
'text2G', g,
'text2B', b,
'text3', Abacus:FormatMoneyShort(item.cost, true)
)
end
end
end
local value = 0
local max = 0
for i,item in self.itemStatus do
if i ~= 12 then
value = value + item.value
max = max + item.max
end
end
cat = Tablet:AddCategory(
'columns', 2,
'text', L["Total"],
'child_textR', 1,
'child_textG', 1,
'child_textB', 0,
'child_text2R', 1,
'child_text2G', 1,
'child_text2B', 1
)
local r, g, b = Crayon:GetThresholdColor(value / max)
cat:AddLine(
'text', L["Percent"],
'text2', string.format("%.0f%%", value / max * 100),
'text2R', r,
'text2G', g,
'text2B', b
)
cat:AddLine(
'text', L["Repair cost"],
'text2', Abacus:FormatMoneyFull(cost, true)
)
if not self.merchantShown then
if self.isSergeant then
if self.isHonored then
cat:AddLine(
'text', TEXT_HONORED .. " / " .. TEXT_SERGEANT,
'text2', Abacus:FormatMoneyFull(cost * 0.9, true)
)
cat:AddLine(
'text', TEXT_HONORED .. " & " .. TEXT_SERGEANT,
'text2', Abacus:FormatMoneyFull(cost * 0.8, true)
)
else
cat:AddLine(
'text', TEXT_SERGEANT,
'text2', Abacus:FormatMoneyFull(cost * 0.9, true)
)
end
elseif self.isHonored then
cat:AddLine(
'text', TEXT_HONORED,
'text2', Abacus:FormatMoneyFull(cost * 0.9, true)
)
end
end
end
function DurabilityFu:PromptEquipment_OnClick()
RepairAllItems()
self:ClosePopup()
self:Update()
end
function DurabilityFu:PromptInventory_OnClick()
ShowRepairCursor()
for bag = 0, 4 do
for slot = 1, GetContainerNumSlots(bag) do
local _,repairCost = Gratuity:SetBagItem(bag, slot)
if repairCost ~= nil and repairCost > 0 then
PickupContainerItem(bag, slot)
end
end
end
HideRepairCursor()
self:ClosePopup()
self:Update()
self:ScheduleRepeatingEvent(self.name, self.OnUpdate, 1, self)
end
function DurabilityFu:OnUpdate()
if self.updateNum == nil then
self.updateNum = 0
end
self:Update()
self.updateNum = self.updateNum + 1
if self.updateNum >= 5 then
self:CancelScheduledEvent(self.name)
self.updateNum = 0
end
end
function DurabilityFu:PromptBoth_OnClick()
RepairAllItems()
self:PromptInventory_OnClick()
end
local popup
function DurabilityFu:ClosePopup()
if popup then
popup:Hide()
end
end
local buttonSize = 32
function DurabilityFu:OpenPopup()
local canRepair, repairCost = CanMerchantRepair(), GetRepairAllCost()
if not canRepair then
return
end
repairCost = repairCost + self:CalculateInventoryCost()
if repairCost == 0 then
return
end
if not popup then
popup = CreateFrame("Frame", "DurabilityFuPrompt", UIParent)
popup:SetFrameStrata("DIALOG")
popup:EnableMouse(true)
popup:SetMovable(true)
popup:Hide()
popup:SetWidth(256)
popup:SetHeight(160)
popup:SetPoint("TOP", UIParent, "TOP", self.db.profile.popupX, self.db.profile.popupY)
local header = CreateFrame("Frame", popup:GetName() .. "Header", popup)
header:SetWidth(192)
header:SetHeight(32)
header:SetPoint("TOP", popup, "TOP", 0, 6)
local texture = header:CreateTexture(popup:GetName() .. "HeaderBar", "ARTWORK")
texture:SetTexture("Interface\\DialogFrame\\UI-DialogBox-Header")
texture:SetWidth(384)
texture:SetHeight(64)
texture:SetPoint("TOP", header, "TOP", 0, 5)
texture:Show()
local text = header:CreateFontString(popup:GetName() .. "HeaderTitle", "ARTWORK")
text:SetFontObject(GameFontNormal)
text:SetPoint("CENTER", header, "CENTER", 0, 0)
text:SetText(self:GetTitle() .. " " .. L["Repair"])
header:EnableMouse(true)
header:SetMovable(true)
header:SetScript("OnMouseDown", function()
popup:StartMoving()
end)
header:SetScript("OnMouseUp", function()
popup:StopMovingOrSizing()
self.db.profile.popupY = popup:GetTop() - GetScreenHeight()
self.db.profile.popupX = popup:GetCenter() - GetScreenWidth() / 2
end)
local eqButton = CreateFrame("Button", popup:GetName() .. "EquipmentButton", popup)
popup.eqButton = eqButton
eqButton:SetWidth(buttonSize)
eqButton:SetHeight(buttonSize)
local texture = eqButton:CreateTexture()
texture:SetWidth(buttonSize * 1.6458333)
texture:SetHeight(buttonSize * 1.6458333)
texture:SetPoint("CENTER", eqButton, "CENTER")
texture:SetTexture("Interface\\Buttons\\UI-Quickslot2")
eqButton:SetNormalTexture(texture)
local texture = eqButton:CreateTexture(nil, "BACKGROUND")
texture:SetTexture("Interface\\Icons\\INV_Chest_Leather_08")
texture:SetAllPoints(eqButton)
eqButton:SetPushedTexture("Interface\\Buttons\\UI-Quickslot-Depress")
local texture = eqButton:CreateTexture()
texture:SetTexture("Interface\\Buttons\\ButtonHilight-Square")
texture:SetAllPoints(eqButton)
eqButton:SetHighlightTexture(texture)
local texture = eqButton:CreateTexture()
texture:SetTexture("Interface\\Icons\\INV_Chest_Leather_08")
texture:SetDesaturated(true)
texture:SetAllPoints(eqButton)
eqButton:SetDisabledTexture(texture)
eqButton:SetPoint("TOPRIGHT", popup, "TOPRIGHT", -18, -36)
eqButton:SetScript("OnClick", function()
self:PromptEquipment_OnClick()
end)
local texture = eqButton:CreateTexture(nil, "ARTWORK")
texture:SetTexture(0, 0, 0, 0.5)
texture:SetAllPoints(eqButton)
local button_Enable = eqButton.Enable
function eqButton:Enable()
button_Enable(self)
texture:Hide()
end
local button_Disable = eqButton.Disable
function eqButton:Disable()
button_Disable(self)
texture:Show()
end
local invButton = CreateFrame("Button", popup:GetName() .. "InventoryButton", popup)
popup.invButton = invButton
invButton:SetWidth(buttonSize)
invButton:SetHeight(buttonSize)
local texture = invButton:CreateTexture()
texture:SetWidth(buttonSize * 1.6458333)
texture:SetHeight(buttonSize * 1.6458333)
texture:SetPoint("CENTER", invButton, "CENTER")
texture:SetTexture("Interface\\Buttons\\UI-Quickslot2")
invButton:SetNormalTexture(texture)
local texture = invButton:CreateTexture(nil, "BACKGROUND")
texture:SetTexture("Interface\\Icons\\INV_Misc_Bag_10")
texture:SetAllPoints(invButton)
invButton:SetPushedTexture("Interface\\Buttons\\UI-Quickslot-Depress")
local texture = invButton:CreateTexture()
texture:SetTexture("Interface\\Buttons\\ButtonHilight-Square")
texture:SetAllPoints(invButton)
invButton:SetHighlightTexture(texture)
local texture = invButton:CreateTexture()
texture:SetTexture("Interface\\Icons\\INV_Misc_Bag_10")
texture:SetDesaturated(true)
texture:SetAllPoints(invButton)
invButton:SetDisabledTexture(texture)
invButton:SetPoint("TOP", eqButton, "BOTTOM", 0, -8)
invButton:SetScript("OnClick", function()
self:PromptInventory_OnClick()
end)
local texture = invButton:CreateTexture(nil, "ARTWORK")
texture:SetTexture(0, 0, 0, 0.5)
texture:SetAllPoints(invButton)
local button_Enable = invButton.Enable
function invButton:Enable()
button_Enable(self)
texture:Hide()
end
local button_Disable = invButton.Disable
function invButton:Disable()
button_Disable(self)
texture:Show()
end
local bothButton = CreateFrame("Button", popup:GetName() .. "BothButton", popup)
popup.bothButton = bothButton
bothButton:SetWidth(buttonSize)
bothButton:SetHeight(buttonSize)
local texture = bothButton:CreateTexture()
texture:SetWidth(buttonSize * 1.6458333)
texture:SetHeight(buttonSize * 1.6458333)
texture:SetPoint("CENTER", bothButton, "CENTER")
texture:SetTexture("Interface\\Buttons\\UI-Quickslot2")
bothButton:SetNormalTexture(texture)
local texture = bothButton:CreateTexture(nil, "BACKGROUND")
texture:SetTexture("Interface\\Icons\\Trade_Blacksmithing")
texture:SetAllPoints(bothButton)
bothButton:SetPushedTexture("Interface\\Buttons\\UI-Quickslot-Depress")
local texture = bothButton:CreateTexture()
texture:SetTexture("Interface\\Buttons\\ButtonHilight-Square")
texture:SetAllPoints(bothButton)
bothButton:SetHighlightTexture(texture)
local texture = bothButton:CreateTexture()
texture:SetTexture("Interface\\Icons\\Trade_Blacksmithing")
texture:SetDesaturated(true)
texture:SetAllPoints(bothButton)
bothButton:SetDisabledTexture(texture)
bothButton:SetPoint("TOP", invButton, "BOTTOM", 0, -8)
bothButton:SetScript("OnClick", function()
self:PromptBoth_OnClick()
end)
local texture = bothButton:CreateTexture(nil, "ARTWORK")
texture:SetTexture(0, 0, 0, 0.5)
texture:SetAllPoints(bothButton)
local button_Enable = bothButton.Enable
function bothButton:Enable()
button_Enable(self)
texture:Hide()
end
local button_Disable = bothButton.Disable
function bothButton:Disable()
button_Disable(self)
texture:Show()
end
local closeButton = CreateFrame("Button", popup:GetName() .. "CloseButton", popup)
popup.closeButton = closeButton
closeButton:SetWidth(32)
closeButton:SetHeight(32)
closeButton:SetPoint("TOPRIGHT", popup, "TOPRIGHT", 0, 0)
closeButton:SetNormalTexture("Interface\\Buttons\\UI-Panel-MinimizeButton-Up")
closeButton:SetPushedTexture("Interface\\Buttons\\UI-Panel-MinimizeButton-Down")
local texture = closeButton:CreateTexture()
texture:SetTexture("Interface\\Buttons\\UI-Panel-MinimizeButton-Highlight")
texture:SetBlendMode("ADD")
closeButton:SetHighlightTexture(texture)
closeButton:SetScript("OnClick", function()
self:ClosePopup()
end)
closeButton:Show()
local eqCost = CreateFrame("Frame", popup:GetName() .. "EquipmentCost", popup)
popup.eqCost = eqCost
eqCost:SetWidth(96)
eqCost:SetHeight(13)
eqCost:SetPoint("RIGHT", eqButton, "LEFT", -8, 0)
local copper = CreateFrame("Frame", eqCost:GetName() .. "Copper", eqCost)
copper:SetWidth(32)
copper:SetHeight(13)
copper:SetPoint("RIGHT", eqCost, "RIGHT")
local texture = copper:CreateTexture(copper:GetName() .. "Texture", "ARTWORK")
texture:SetPoint("RIGHT", copper, "RIGHT")
texture:SetWidth(13)
texture:SetHeight(13)
texture:SetTexture("Interface\\MoneyFrame\\UI-MoneyIcons")
texture:SetTexCoord(0.5, 0.75, 0, 1)
local copperText = copper:CreateFontString(copper:GetName() .. "Text", "ARTWORK")
copperText:SetPoint("RIGHT", texture, "LEFT")
copperText:SetHeight(13)
copperText:SetFontObject(NumberFontNormal)
copperText:SetText(0)
copperText:SetJustifyH("RIGHT")
local silver = CreateFrame("Frame", eqCost:GetName() .. "Silver", eqCost)
silver:SetWidth(32)
silver:SetHeight(13)
silver:SetPoint("RIGHT", copper, "LEFT")
local texture = silver:CreateTexture(silver:GetName() .. "Texture", "ARTWORK")
texture:SetPoint("RIGHT", silver, "RIGHT")
texture:SetWidth(13)
texture:SetHeight(13)
texture:SetTexture("Interface\\MoneyFrame\\UI-MoneyIcons")
texture:SetTexCoord(0.25, 0.5, 0, 1)
local silverText = silver:CreateFontString(silver:GetName() .. "Text", "ARTWORK")
silverText:SetPoint("RIGHT", texture, "LEFT")
silverText:SetHeight(13)
silverText:SetFontObject(NumberFontNormal)
silverText:SetText(0)
silverText:SetJustifyH("RIGHT")
local gold = CreateFrame("Frame", eqCost:GetName() .. "Gold", eqCost)
gold:SetWidth(32)
gold:SetHeight(13)
gold:SetPoint("RIGHT", silver, "LEFT")
local texture = gold:CreateTexture(gold:GetName() .. "Texture", "ARTWORK")
texture:SetPoint("RIGHT", gold, "RIGHT")
texture:SetWidth(13)
texture:SetHeight(13)
texture:SetTexture("Interface\\MoneyFrame\\UI-MoneyIcons")
texture:SetTexCoord(0, 0.25, 0, 1)
local goldText = gold:CreateFontString(gold:GetName() .. "Text", "ARTWORK")
goldText:SetPoint("RIGHT", texture, "LEFT")
goldText:SetHeight(13)
goldText:SetFontObject(NumberFontNormal)
goldText:SetText(0)
goldText:SetJustifyH("RIGHT")
function eqCost:SetValue(value)
local g = floor(value / 10000)
local s = mod(floor(value / 100), 100)
local c = mod(value, 100)
goldText:SetText(g)
silverText:SetText(s)
copperText:SetText(c)
if g == 0 then
gold:Hide()
if s == 0 then
silver:Hide()
else
silver:Show()
end
else
gold:Show()
silver:Show()
end
end
local invCost = CreateFrame("Frame", popup:GetName() .. "InventoryCost", popup)
popup.invCost = invCost
invCost:SetWidth(96)
invCost:SetHeight(13)
invCost:SetPoint("RIGHT", invButton, "LEFT", -8, 0)
local copper = CreateFrame("Frame", invCost:GetName() .. "Copper", invCost)
copper:SetWidth(32)
copper:SetHeight(13)
copper:SetPoint("RIGHT", invCost, "RIGHT")
local texture = copper:CreateTexture(copper:GetName() .. "Texture", "ARTWORK")
texture:SetPoint("RIGHT", copper, "RIGHT")
texture:SetWidth(13)
texture:SetHeight(13)
texture:SetTexture("Interface\\MoneyFrame\\UI-MoneyIcons")
texture:SetTexCoord(0.5, 0.75, 0, 1)
local copperText = copper:CreateFontString(copper:GetName() .. "Text", "ARTWORK")
copperText:SetPoint("RIGHT", texture, "LEFT")
copperText:SetHeight(13)
copperText:SetFontObject(NumberFontNormal)
copperText:SetText(0)
copperText:SetJustifyH("RIGHT")
local silver = CreateFrame("Frame", invCost:GetName() .. "Silver", invCost)
silver:SetWidth(32)
silver:SetHeight(13)
silver:SetPoint("RIGHT", copper, "LEFT")
local texture = silver:CreateTexture(silver:GetName() .. "Texture", "ARTWORK")
texture:SetPoint("RIGHT", silver, "RIGHT")
texture:SetWidth(13)
texture:SetHeight(13)
texture:SetTexture("Interface\\MoneyFrame\\UI-MoneyIcons")
texture:SetTexCoord(0.25, 0.5, 0, 1)
local silverText = silver:CreateFontString(silver:GetName() .. "Text", "ARTWORK")
silverText:SetPoint("RIGHT", texture, "LEFT")
silverText:SetHeight(13)
silverText:SetFontObject(NumberFontNormal)
silverText:SetText(0)
silverText:SetJustifyH("RIGHT")
local gold = CreateFrame("Frame", invCost:GetName() .. "Gold", invCost)
gold:SetWidth(32)
gold:SetHeight(13)
gold:SetPoint("RIGHT", silver, "LEFT")
local texture = gold:CreateTexture(gold:GetName() .. "Texture", "ARTWORK")
texture:SetPoint("RIGHT", gold, "RIGHT")
texture:SetWidth(13)
texture:SetHeight(13)
texture:SetTexture("Interface\\MoneyFrame\\UI-MoneyIcons")
texture:SetTexCoord(0, 0.25, 0, 1)
local goldText = gold:CreateFontString(gold:GetName() .. "Text", "ARTWORK")
goldText:SetPoint("RIGHT", texture, "LEFT")
goldText:SetHeight(13)
goldText:SetFontObject(NumberFontNormal)
goldText:SetText(0)
goldText:SetJustifyH("RIGHT")
function invCost:SetValue(value)
local g = floor(value / 10000)
local s = mod(floor(value / 100), 100)
local c = mod(value, 100)
goldText:SetText(g)
silverText:SetText(s)
copperText:SetText(c)
if g == 0 then
gold:Hide()
if s == 0 then
silver:Hide()
else
silver:Show()
end
else
gold:Show()
silver:Show()
end
end
local bothCost = CreateFrame("Frame", popup:GetName() .. "BothCost", popup)
popup.bothCost = bothCost
bothCost:SetWidth(96)
bothCost:SetHeight(13)
bothCost:SetPoint("RIGHT", bothButton, "LEFT", -8, 0)
local copper = CreateFrame("Frame", bothCost:GetName() .. "Copper", bothCost)
copper:SetWidth(32)
copper:SetHeight(13)
copper:SetPoint("RIGHT", bothCost, "RIGHT")
local texture = copper:CreateTexture(copper:GetName() .. "Texture", "ARTWORK")
texture:SetPoint("RIGHT", copper, "RIGHT")
texture:SetWidth(13)
texture:SetHeight(13)
texture:SetTexture("Interface\\MoneyFrame\\UI-MoneyIcons")
texture:SetTexCoord(0.5, 0.75, 0, 1)
local copperText = copper:CreateFontString(copper:GetName() .. "Text", "ARTWORK")
copperText:SetPoint("RIGHT", texture, "LEFT")
copperText:SetHeight(13)
copperText:SetFontObject(NumberFontNormal)
copperText:SetText(0)
copperText:SetJustifyH("RIGHT")
local silver = CreateFrame("Frame", bothCost:GetName() .. "Silver", bothCost)
silver:SetWidth(32)
silver:SetHeight(13)
silver:SetPoint("RIGHT", copper, "LEFT")
local texture = silver:CreateTexture(silver:GetName() .. "Texture", "ARTWORK")
texture:SetPoint("RIGHT", silver, "RIGHT")
texture:SetWidth(13)
texture:SetHeight(13)
texture:SetTexture("Interface\\MoneyFrame\\UI-MoneyIcons")
texture:SetTexCoord(0.25, 0.5, 0, 1)
local silverText = silver:CreateFontString(silver:GetName() .. "Text", "ARTWORK")
silverText:SetPoint("RIGHT", texture, "LEFT")
silverText:SetHeight(13)
silverText:SetFontObject(NumberFontNormal)
silverText:SetText(0)
silverText:SetJustifyH("RIGHT")
local gold = CreateFrame("Frame", bothCost:GetName() .. "Gold", bothCost)
gold:SetWidth(32)
gold:SetHeight(13)
gold:SetPoint("RIGHT", silver, "LEFT")
local texture = gold:CreateTexture(gold:GetName() .. "Texture", "ARTWORK")
texture:SetPoint("RIGHT", gold, "RIGHT")
texture:SetWidth(13)
texture:SetHeight(13)
texture:SetTexture("Interface\\MoneyFrame\\UI-MoneyIcons")
texture:SetTexCoord(0, 0.25, 0, 1)
local goldText = gold:CreateFontString(gold:GetName() .. "Text", "ARTWORK")
goldText:SetPoint("RIGHT", texture, "LEFT")
goldText:SetHeight(13)
goldText:SetFontObject(NumberFontNormal)
goldText:SetText(0)
goldText:SetJustifyH("RIGHT")
function bothCost:SetValue(value)
local g = floor(value / 10000)
local s = mod(floor(value / 100), 100)
local c = mod(value, 100)
goldText:SetText(g)
silverText:SetText(s)
copperText:SetText(c)
if g == 0 then
gold:Hide()
if s == 0 then
silver:Hide()
else
silver:Show()
end
else
gold:Show()
silver:Show()
end
end
local eqLabel = popup:CreateFontString(popup:GetName() .. "EquipmentLabel", "ARTWORK")
eqLabel:SetPoint("RIGHT", eqCost, "LEFT", -8, 0)
eqLabel:SetFontObject(GameFontNormal)
eqLabel:SetText(L["Equipment"])
local invLabel = popup:CreateFontString(popup:GetName() .. "InventoryLabel", "ARTWORK")
invLabel:SetPoint("RIGHT", invCost, "LEFT", -8, 0)
invLabel:SetFontObject(GameFontNormal)
invLabel:SetText(L["Inventory"])
local bothLabel = popup:CreateFontString(popup:GetName() .. "BothLabel", "ARTWORK")
bothLabel:SetPoint("RIGHT", bothCost, "LEFT", -8, 0)
bothLabel:SetFontObject(GameFontNormal)
bothLabel:SetText(L["Total"])
popup:SetBackdrop({
bgFile = "Interface\\TutorialFrame\\TutorialFrameBackground",
edgeFile = "Interface\\Tooltips\\UI-Tooltip-Border",
tile = true,
edgeSize = 16,
tileSize = 32,
insets = {
left = 5,
right = 5,
top = 5,
bottom = 5
}
})
end
popup:Show()
local equipment = GetRepairAllCost()
local inventory = self:CalculateInventoryCost()
local both = equipment + inventory
popup.bothButton:Disable()
if equipment == 0 then
popup.eqButton:Disable()
else
popup.eqButton:Enable()
popup.bothButton:Enable()
end
if inventory == 0 then
popup.invButton:Disable()
else
popup.invButton:Enable()
popup.bothButton:Enable()
end
popup.eqCost:SetValue(equipment)
popup.invCost:SetValue(inventory)
popup.bothCost:SetValue(both)
end
function DurabilityFu:DurabilityFrame_SetAlerts()
self.hooks.DurabilityFrame_SetAlerts.orig()
if not self:IsShowingMan() then
DurabilityFrame:Hide()
end
end