Code:
--adjust this to set shake strength
local shakemeter = 1
local IsShaking
local a = CreateFrame("Frame") a:RegisterEvent("COMBAT_LOG_EVENT_UNFILTERED")
local function ShakeScreen()
if IsShaking then return end
IsShaking = true
local point1, point2={WorldFrame:GetPoint(1)}, {WorldFrame:GetPoint(2)}
local timeelapsed = 0
local f = {}
for i,k in pairs({{shakemeter*5,0},{0,shakemeter*5},{shakemeter*-5,0},{0,shakemeter*-5}}) do
tinsert(f, function(self, elapsed)
timeelapsed = timeelapsed+elapsed
if timeelapsed > 1 then
self:SetScript("OnUpdate", nil)
WorldFrame:ClearAllPoints()
WorldFrame:SetPoint(unpack(point1))
WorldFrame:SetPoint(unpack(point2))
IsShaking = false
else
WorldFrame:ClearAllPoints()
WorldFrame:SetPoint(point1[1], point1[2], point1[3], point1[4]+k[1], point1[5]+k[2])
WorldFrame:SetPoint(point2[1], point2[2], point2[3], point2[4]+k[1], point2[5]+k[2])
self:SetScript("OnUpdate", f[i<4 and i+1 or 1])
end
end)
end
a:SetScript("OnUpdate", f[1])
end
a:SetScript("OnEvent", function(self, event, ...)
if not (select(3, ...)) == UnitGUID("player") then return end
local IsCrit = (select(18,...))
if (select(2,...)) == "SWING_DAMAGE" then IsCrit = (select(15,...)) end
if (select(2, ...)):find("_DAMAGE") and IsCrit then
ShakeScreen()
end
end)
How to use this