mirror of
https://github.com/brues-code/pfUI.git
synced 2026-10-30 07:30:52 +00:00
ClassicAPI's UnitHasIncomingResurrection sees every resurrection cast in view from SMSG_SPELL_START and ends it with the cast, and INCOMING_RESURRECT_CHANGED signals each change. libpredict's own tracking goes: the ress tables and 60s timers, parsing Resurrection and RES/RESNO messages, clearing on UNIT_HEALTH, and the rez branches of the cast handlers, along with UNIT_SPELLCAST_STOP and the foreign cast targets only rez used. libpredict still announces the player's own resurrections to HealComm and CTRA for clients without ClassicAPI. The native state ends with the cast, so a rez that landed would vanish before the target accepts it. libpredict records the SPELL_RESURRECT combat log event per GUID and keeps the offer until the target is alive again or the 60s accept popup runs out, unlike Grid2, which cannot tell a landed rez from a cancelled one. UnitHasResurrection answers both. The unit frames show the icon in RefreshIndicators, refreshed by INCOMING_RESURRECT_CHANGED on the frame's own unit and by libpredict for offers, instead of polling libpredict every 0.1s.
79 lines
3.3 KiB
Lua
79 lines
3.3 KiB
Lua
do
|
|
-- ClassicAPI dependency gate.
|
|
--
|
|
-- Which TOC the client opened already answers "is ClassicAPI here?". Whenever
|
|
-- the DLL is loaded it redirects the read of `pfUI\pfUI.toc` to
|
|
-- `pfUI_Turtle.toc` (Turtle clients) or `pfUI_ClassicAPI.toc` (everything
|
|
-- else). Reaching this file from the plain `pfUI.toc` therefore means
|
|
-- ClassicAPI is absent -- and that TOC deliberately loads nothing but this
|
|
-- file, so there is nothing to disable, only a notice to show.
|
|
--
|
|
-- The flavor TOCs still need a version gate of their own: the redirect has
|
|
-- existed since ClassicAPI v1.11.0, well below the API surface pfUI relies
|
|
-- on. There pfUI does load, and will throw wherever it reaches for something
|
|
-- the installed DLL doesn't have yet -- the popup names the cause so those
|
|
-- errors aren't a mystery.
|
|
local PFUI_CLASSIC_API_MIN = 11802 -- (X*10000 + Y*100 + Z)
|
|
local PFUI_CLASSIC_API_LATEST = PFUI_CLASSIC_API_MIN
|
|
local PFUI_CLASSIC_API_WEBSITE = "https://github.com/brues-code/ClassicAPI"
|
|
local PFUI_CLASSIC_API_LATEST_URL = PFUI_CLASSIC_API_WEBSITE .. "/releases/latest"
|
|
local function FormatVersion(packed)
|
|
local x = math.floor(packed / 10000)
|
|
local y = math.floor(math.mod(packed, 10000) / 100)
|
|
local z = math.mod(packed, 100)
|
|
return string.format("v%d.%d.%d", x, y, z)
|
|
end
|
|
|
|
local headline, detail
|
|
if not CLASSIC_API_VERSION then
|
|
headline = "|cff33ffccpf|cffffffffUI|r has been disabled."
|
|
detail = "The ClassicAPI DLL isn't loaded. Download the latest release from:"
|
|
elseif CLASSIC_API_VERSION < PFUI_CLASSIC_API_MIN then
|
|
headline = "|cff33ffccpf|cffffffffUI|r will not work correctly on ClassicAPI " .. FormatVersion(CLASSIC_API_VERSION) .. "."
|
|
detail = FormatVersion(PFUI_CLASSIC_API_MIN) .. " or newer is required -- any errors alongside this one are the APIs it is missing. Download the latest release from:"
|
|
end
|
|
|
|
if detail then
|
|
local function ShowRequiredPopup()
|
|
StaticPopupDialogs["PFUI_CLASSICAPI_REQUIRED"] = {
|
|
text = headline .. "\n\n" .. detail,
|
|
button1 = OKAY,
|
|
hasEditBox = 1,
|
|
editBoxWidth = 280,
|
|
timeout = 0,
|
|
whileDead = 1,
|
|
hideOnEscape = 1,
|
|
preferredIndex = 3,
|
|
OnShow = function()
|
|
local editBox = getglobal(this:GetName().."EditBox")
|
|
if editBox then
|
|
editBox:SetText(PFUI_CLASSIC_API_LATEST_URL)
|
|
editBox:HighlightText()
|
|
editBox:SetFocus()
|
|
end
|
|
end,
|
|
}
|
|
StaticPopup_Show("PFUI_CLASSICAPI_REQUIRED")
|
|
DEFAULT_CHAT_FRAME:AddMessage(
|
|
headline .. " " .. detail .. " " .. PFUI_CLASSIC_API_LATEST_URL,
|
|
1, 0.3, 0.3
|
|
)
|
|
end
|
|
local loginFrame = CreateFrame("Frame")
|
|
loginFrame:RegisterEvent("PLAYER_ENTERING_WORLD")
|
|
loginFrame:SetScript("OnEvent", function()
|
|
loginFrame:UnregisterEvent("PLAYER_ENTERING_WORLD")
|
|
ShowRequiredPopup()
|
|
end)
|
|
elseif CLASSIC_API_VERSION < PFUI_CLASSIC_API_LATEST then
|
|
EventUtil.ContinueOnPlayerLogin(function()
|
|
C_Timer.After(8, function()
|
|
DEFAULT_CHAT_FRAME:AddMessage(
|
|
"|cff33ffccpf|rUI: ClassicAPI " .. FormatVersion(PFUI_CLASSIC_API_LATEST) .. " is available — " .. PFUI_CLASSIC_API_LATEST_URL,
|
|
1, 0.85, 0.3
|
|
)
|
|
end)
|
|
end)
|
|
end
|
|
end
|