8ad40722a0
Update nameplate coloring. Fix world map blips
200 lines
4.8 KiB
Lua
200 lines
4.8 KiB
Lua
local E, L, V, P, G = unpack(ElvUI)
|
|
local TA = E:NewModule("Enhanced_TrainAll", "AceHook-3.0", "AceEvent-3.0")
|
|
|
|
local select = select
|
|
local format = string.format
|
|
|
|
local BuyTrainerService = BuyTrainerService
|
|
local GetMoney = GetMoney
|
|
local GetNumTrainerServices = GetNumTrainerServices
|
|
local GetTrainerServiceCost = GetTrainerServiceCost
|
|
local GetTrainerServiceInfo = GetTrainerServiceInfo
|
|
|
|
local function BetterSafeThanSorry_OnUpdate(self, elapsed)
|
|
self.delay = self.delay - elapsed
|
|
|
|
if self.delay <= 0 then
|
|
TA:ResetScript()
|
|
end
|
|
end
|
|
|
|
function TA:TrainAllSkills()
|
|
self.locked = true
|
|
self.button:Disable()
|
|
|
|
local j, cost = 0
|
|
local money = GetMoney()
|
|
|
|
for i = 1, GetNumTrainerServices() do
|
|
if select(3, GetTrainerServiceInfo(i)) == "available" then
|
|
j = j + 1
|
|
cost = GetTrainerServiceCost(i)
|
|
if money >= cost then
|
|
money = money - cost
|
|
BuyTrainerService(i)
|
|
else
|
|
self:ResetScript()
|
|
return
|
|
end
|
|
end
|
|
end
|
|
|
|
if j > 0 then
|
|
self.skillsToLearn = j
|
|
self.skillsLearned = 0
|
|
|
|
self:RegisterEvent("TRAINER_UPDATE")
|
|
|
|
self.button.delay = 1
|
|
self.button:SetScript("OnUpdate", BetterSafeThanSorry_OnUpdate)
|
|
else
|
|
self:ResetScript()
|
|
end
|
|
end
|
|
|
|
function TA:TRAINER_UPDATE()
|
|
self.skillsLearned = self.skillsLearned + 1
|
|
|
|
if self.skillsLearned >= self.skillsToLearn then
|
|
self:ResetScript()
|
|
self:TrainAllSkills()
|
|
else
|
|
self.button.delay = 1
|
|
end
|
|
end
|
|
|
|
function TA:ResetScript()
|
|
self.button:SetScript("OnUpdate", nil)
|
|
self:UnregisterEvent("TRAINER_UPDATE")
|
|
|
|
self.skillsLearned = nil
|
|
self.skillsToLearn = nil
|
|
self.button.delay = nil
|
|
self.locked = nil
|
|
end
|
|
|
|
function TA:ButtonCreate()
|
|
self.button = CreateFrame("Button", "ElvUI_TrainAllButton", ClassTrainerFrame, "UIPanelButtonTemplate")
|
|
self.button:Size(80, 22)
|
|
self.button:SetFormattedText("%s %s", TRAIN, ALL)
|
|
|
|
if E.private.skins.blizzard.enable and E.private.skins.blizzard.trainer then
|
|
self.button:Point("RIGHT", ClassTrainerTrainButton, "LEFT", -3, 0)
|
|
E:GetModule("Skins"):HandleButton(self.button)
|
|
else
|
|
self.button:Point("RIGHT", ClassTrainerTrainButton, "LEFT")
|
|
end
|
|
|
|
self.button:SetScript("OnClick", function() TA:TrainAllSkills() end)
|
|
|
|
self.button:HookScript("OnEnter", function()
|
|
local cost = 0
|
|
for i = 1, GetNumTrainerServices() do
|
|
if select(3, GetTrainerServiceInfo(i)) == "available" then
|
|
cost = cost + GetTrainerServiceCost(i)
|
|
end
|
|
end
|
|
|
|
GameTooltip:SetOwner(self.button,"ANCHOR_TOPLEFT", 0, 5)
|
|
GameTooltip:SetText(format("|cffffffff%s|r %s", TABARDVENDORCOST, E:FormatMoney(cost, E.db.datatexts.goldFormat or "BLIZZARD", not E.db.datatexts.goldCoins)))
|
|
end)
|
|
|
|
self.button:HookScript("OnLeave", function()
|
|
GameTooltip:Hide()
|
|
end)
|
|
end
|
|
|
|
function TA:ButtonUpdate()
|
|
if self.locked then return end
|
|
|
|
for i = 1, GetNumTrainerServices() do
|
|
if select(3, GetTrainerServiceInfo(i)) == "available" then
|
|
self.button:Enable()
|
|
return
|
|
end
|
|
end
|
|
|
|
self.button:Disable()
|
|
end
|
|
|
|
function TA:ButtonPosition(disable)
|
|
if disable then
|
|
ClassTrainerTrainButton:Point("CENTER", ClassTrainerFrame, "TOPLEFT", 221, -417)
|
|
|
|
ClassTrainerCancelButton.Show = nil
|
|
ClassTrainerCancelButton:Show()
|
|
else
|
|
ClassTrainerTrainButton:Point("CENTER", ClassTrainerFrame, "TOPLEFT", 304, -417)
|
|
|
|
ClassTrainerCancelButton.Show = E.noop
|
|
ClassTrainerCancelButton:Hide()
|
|
end
|
|
end
|
|
|
|
function TA:ADDON_LOADED(_, addon)
|
|
if self.blockCallback or addon ~= "Blizzard_TrainerUI" then return end
|
|
|
|
self:ButtonCreate()
|
|
self:ButtonPosition()
|
|
|
|
self:SecureHook("ClassTrainerFrame_Update", "ButtonUpdate")
|
|
self:UnregisterEvent("ADDON_LOADED")
|
|
end
|
|
|
|
function TA:ToggleState()
|
|
if E.db.enhanced.general.trainAllSkills then
|
|
if not self.button then
|
|
if IsAddOnLoaded("Blizzard_TrainerUI") then
|
|
self.blockCallback = nil
|
|
self:ADDON_LOADED(nil, "Blizzard_TrainerUI")
|
|
elseif E.private.skins.blizzard.enable and E.private.skins.blizzard.trainer then
|
|
if not self.skinCallback then
|
|
E:GetModule("Skins"):AddCallbackForAddon("Blizzard_TrainerUI", "Enhanced_Blizzard_TrainerUI_TrainAll", function()
|
|
self:ADDON_LOADED(nil, "Blizzard_TrainerUI")
|
|
end)
|
|
|
|
self.skinCallback = true
|
|
else
|
|
self.blockCallback = nil
|
|
end
|
|
else
|
|
self:RegisterEvent("ADDON_LOADED")
|
|
end
|
|
else
|
|
self.button:Show()
|
|
self:ButtonPosition()
|
|
|
|
if not self:IsHooked("ClassTrainerFrame_Update") then
|
|
self:SecureHook("ClassTrainerFrame_Update", "ButtonUpdate")
|
|
end
|
|
end
|
|
else
|
|
if not self.button then
|
|
self:UnregisterEvent("ADDON_LOADED")
|
|
|
|
if self.skinCallback then
|
|
self.blockCallback = true
|
|
end
|
|
else
|
|
self.button:Hide()
|
|
self:UnhookAll()
|
|
self:ButtonPosition(true)
|
|
|
|
if self.locked then
|
|
self:ResetScript()
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
function TA:Initialize()
|
|
if not E.db.enhanced.general.trainAllSkills then return end
|
|
|
|
self:ToggleState()
|
|
end
|
|
|
|
local function InitializeCallback()
|
|
TA:Initialize()
|
|
end
|
|
|
|
E:RegisterModule(TA:GetName(), InitializeCallback) |