Code:
local _G, MAX_ACHIEVEMENT_ALERTS = _G, MAX_ACHIEVEMENT_ALERTS
local numMoved = 0
local lastMoved
local movedAll
hooksecurefunc("AchievementAlertFrame_GetAlertFrame",function()
if movedAll then return end
for n=(numMoved+1),MAX_ACHIEVEMENT_ALERTS do
local f = _G[("AchievementAlertFrame%d"):format(n)]
if f then
if lastMoved then
f:SetPoint("TOP",lastMoved,"BOTTOM",0,10)
else
f:SetPoint("TOP",UIParent,"TOP",0,-128)
end
lastMoved = f
numMoved = n
else
break
end
end
if numMoved == MAX_ACHIEVEMENT_ALERTS then movedAll=true end
end)
SlashCmdList.TEST_ACHIEVEMENT = function()
AlertFrame_OnEvent(AlertFrame,"ACHIEVEMENT_EARNED",6)
end
SLASH_TEST_ACHIEVEMENT1 = "/tav"
Untested. That's only for achievements - the code for the others should be similar, though. Look at the respective functions used to create the frames in the FrameXML.