更新配置相关显示等

This commit is contained in:
rucky
2026-03-20 14:04:51 +08:00
parent 923a1f9ce2
commit 63337b14d2
14 changed files with 886 additions and 98 deletions

View File

@@ -935,36 +935,86 @@ function SFrames.TalentTree:ApplyVirtualPoints()
return
end
if not self.applyQueue then self.applyQueue = {} end
self.applyQueue = {}
for tb = 1, GetNumTalentTabs() do
local treeTalents = {}
for idx = 1, GetNumTalents(tb) do
local name, icon, tier, column, realRank = GetTalentInfo(tb, idx)
local virtRank = self:GetVirtualRank(tb, idx)
local diff = virtRank - realRank
if diff > 0 then
for i = 1, diff do
table.insert(self.applyQueue, {tab = tb, index = idx})
table.insert(treeTalents, {tab = tb, index = idx, tier = tier or 1})
end
end
end
table.sort(treeTalents, function(a, b) return a.tier < b.tier end)
for _, entry in ipairs(treeTalents) do
table.insert(self.applyQueue, entry)
end
end
if table.getn(self.applyQueue) > 0 then
self.frame:SetScript("OnUpdate", function()
if table.getn(SFrames.TalentTree.applyQueue) > 0 then
local t = table.remove(SFrames.TalentTree.applyQueue, 1)
LearnTalent(t.tab, t.index)
else
this:SetScript("OnUpdate", nil)
SFrames.TalentTree.simMode = false
SFrames.TalentTree:UpdateSimModeLabel()
end
end)
else
if table.getn(self.applyQueue) == 0 then
DEFAULT_CHAT_FRAME:AddMessage("|c" .. GetHex() .. "Nanami:|r 没有新的天赋点数需要应用。")
return
end
local total = table.getn(self.applyQueue)
DEFAULT_CHAT_FRAME:AddMessage("|c" .. GetHex() .. "Nanami:|r 开始应用 " .. total .. " 个天赋点...")
if not self.applyEventFrame then
self.applyEventFrame = CreateFrame("Frame", "NanamiTalentApplyFrame")
end
self.applyEventFrame:UnregisterAllEvents()
self.applyStallTimer = 0
self.applyWaiting = false
local function FinishApply()
self.applyEventFrame:UnregisterAllEvents()
self.applyEventFrame:SetScript("OnUpdate", nil)
self.applyQueue = {}
self.applyWaiting = false
self.simMode = false
self:UpdateSimModeLabel()
DEFAULT_CHAT_FRAME:AddMessage("|c" .. GetHex() .. "Nanami:|r 天赋应用完成。")
end
local function TryNextTalent()
if table.getn(self.applyQueue) == 0 then
FinishApply()
return
end
local t = table.remove(self.applyQueue, 1)
LearnTalent(t.tab, t.index)
self.applyWaiting = true
self.applyStallTimer = 0
end
self.applyEventFrame:RegisterEvent("CHARACTER_POINTS_CHANGED")
self.applyEventFrame:SetScript("OnEvent", function()
if not SFrames.TalentTree.applyWaiting then return end
SFrames.TalentTree.applyWaiting = false
SFrames.TalentTree.applyStallTimer = 0
TryNextTalent()
end)
self.applyEventFrame:SetScript("OnUpdate", function()
if not SFrames.TalentTree.applyWaiting then return end
SFrames.TalentTree.applyStallTimer = (SFrames.TalentTree.applyStallTimer or 0) + (arg1 or 0)
if SFrames.TalentTree.applyStallTimer >= 2.0 then
SFrames.TalentTree.applyStallTimer = 0
SFrames.TalentTree.applyWaiting = false
if table.getn(SFrames.TalentTree.applyQueue) > 0 then
TryNextTalent()
else
FinishApply()
end
end
end)
TryNextTalent()
end
--------------------------------------------------------------------------------