Files
coa-elvui/ElvUI_Enhanced/Modules/Misc/TrainAllSkills.lua
T
Andrew6810 8ad40722a0 Fixes Enhanced character frame
Update nameplate coloring.
Fix world map blips
2022-10-30 16:41:03 -07:00

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)