Add modules/afkcam.lua
This commit is contained in:
@@ -0,0 +1,206 @@
|
||||
pfUI:RegisterModule("afkcam", "vanilla:tbc", function ()
|
||||
local MARKED_AFK_CAPTURE = SanitizePattern(MARKED_AFK_MESSAGE)
|
||||
local social_chats = {
|
||||
"CHAT_MSG_SAY",
|
||||
"CHAT_MSG_WHISPER",
|
||||
"CHAT_MSG_PARTY",
|
||||
"CHAT_MSG_RAID",
|
||||
"CHAT_MSG_RAID_LEADER",
|
||||
"CHAT_MSG_RAID_WARNING",
|
||||
"CHAT_MSG_GUILD",
|
||||
"CHAT_MSG_OFFICER"
|
||||
}
|
||||
|
||||
local afkcam = CreateFrame("Frame", "pfAFKCam", WorldFrame)
|
||||
local overlay = CreateFrame("Button", "pfAFKCamOverlay", afkcam)
|
||||
overlay.top = overlay:CreateTexture("pfAFKGradientTop", "BACKGROUND")
|
||||
overlay.top:SetPoint("TOPLEFT", overlay, "TOPLEFT")
|
||||
overlay.top:SetPoint("TOPRIGHT", overlay, "TOPRIGHT")
|
||||
overlay.top:SetHeight(100)
|
||||
overlay.top:SetTexture(1,1,1,1)
|
||||
overlay.top:SetGradientAlpha("VERTICAL", 0,0,0,0, 0,0,0,1)
|
||||
|
||||
overlay.bottom = overlay:CreateTexture("pfAFKGradientTop", "BACKGROUND")
|
||||
overlay.bottom:SetPoint("BOTTOMLEFT", overlay, "BOTTOMLEFT")
|
||||
overlay.bottom:SetPoint("BOTTOMRIGHT", overlay, "BOTTOMRIGHT")
|
||||
overlay.bottom:SetHeight(100)
|
||||
overlay.bottom:SetTexture(1,1,1,1)
|
||||
overlay.bottom:SetGradientAlpha("VERTICAL", 0,0,0,1, 0,0,0,0)
|
||||
|
||||
overlay:SetFrameStrata("DIALOG")
|
||||
overlay:SetAllPoints(WorldFrame)
|
||||
|
||||
overlay:SetScript("OnMouseUp",function()
|
||||
SendChatMessage("","AFK")
|
||||
this._parent:stop()
|
||||
end)
|
||||
overlay:SetScript("OnShow", function()
|
||||
this:EnableKeyboard(true)
|
||||
end)
|
||||
overlay:SetScript("OnHide", function()
|
||||
this:EnableKeyboard(false)
|
||||
end)
|
||||
overlay:SetScript("OnKeyUp",function()
|
||||
SendChatMessage("","AFK")
|
||||
this._parent:stop()
|
||||
end)
|
||||
overlay:Hide()
|
||||
|
||||
local chat = CreateFrame("ScrollingMessageFrame", "pfAFKCamChat", overlay)
|
||||
chat:EnableMouse(false)
|
||||
chat:EnableMouseWheel(true)
|
||||
chat:SetHeight(150)
|
||||
chat:SetWidth(500)
|
||||
chat:SetPoint("BOTTOMLEFT",overlay,"BOTTOMLEFT", 10, 10)
|
||||
chat:SetTimeVisible(1800.0)
|
||||
chat:SetMaxLines(500)
|
||||
chat:SetFading(false)
|
||||
chat:SetJustifyH("LEFT")
|
||||
chat:SetFont(pfUI.font_default, C.global.font_size + 1, "OUTLINE")
|
||||
chat:SetScript("OnEvent", function()
|
||||
if not this:IsVisible() then return end
|
||||
local info = _G.ChatTypeInfo[string.gsub(event,"CHAT_MSG_","")]
|
||||
if not info then return end
|
||||
local class = GetUnitData(arg2 or "")
|
||||
local author, msg
|
||||
if class and class ~= UNKNOWN then
|
||||
local class_color = rgbhex(RAID_CLASS_COLORS[class])
|
||||
author = string.format("%s%s|r",class_color,arg2)
|
||||
else
|
||||
author = arg2
|
||||
end
|
||||
msg = string.format("%s|cffffffff:|r %s",author,arg1)
|
||||
this:AddMessage(msg, info.r, info.g, info.b, 1.0)
|
||||
end)
|
||||
for _,ctype in ipairs(social_chats) do
|
||||
chat:RegisterEvent(ctype)
|
||||
end
|
||||
chat:SetScript("OnMouseWheel",function()
|
||||
if arg1 > 0 then
|
||||
this:ScrollUp()
|
||||
else
|
||||
this:ScrollDown()
|
||||
end
|
||||
end)
|
||||
overlay.chat = chat
|
||||
|
||||
overlay._parent = afkcam
|
||||
afkcam.overlay = overlay
|
||||
|
||||
local clock = CreateFrame("Frame", "pfAFKClock", overlay)
|
||||
clock:SetAllPoints(overlay)
|
||||
clock.time = clock:CreateFontString("Status", "OVERLAY")
|
||||
clock.time:SetFont(pfUI.media["font:Hooge.ttf"], 32, "THICKOUTLINE")
|
||||
clock.time:SetJustifyH("CENTER")
|
||||
clock.time:SetPoint("TOP", 0, -10)
|
||||
clock:SetScript("OnUpdate", function()
|
||||
local h, m = GetGameTime()
|
||||
local noon = "AM"
|
||||
local time = ""
|
||||
if C.global.twentyfour == "0" then
|
||||
if C.global.servertime == "1" then
|
||||
if h == 0 then
|
||||
h = 12
|
||||
elseif h == 12 then
|
||||
noon = "PM"
|
||||
elseif h > 12 then
|
||||
h = h - 12
|
||||
noon = "PM"
|
||||
end
|
||||
time = string.format("%.2d|cff33ffcc:|r%.2d %s", h, m, noon)
|
||||
else
|
||||
time = date("%I|cff33ffcc:|r%M %p")
|
||||
end
|
||||
clock.time:SetText(time)
|
||||
else
|
||||
if C.global.servertime == "1" then
|
||||
time = string.format("%.2d|cff33ffcc:|r%.2d", h, m)
|
||||
else
|
||||
time = date("%H|cff33ffcc:|r%M")
|
||||
end
|
||||
end
|
||||
clock.time:SetText(time)
|
||||
end)
|
||||
|
||||
function afkcam:start()
|
||||
if afkcam._spinning then return end
|
||||
afkcam._speed = GetCVar("cameraYawMoveSpeed")
|
||||
afkcam._ownname = GetCVar("UnitNameOwn")
|
||||
afkcam._ui_visible = UIParent:IsVisible()
|
||||
SaveView(4)
|
||||
if afkcam._ui_visible then
|
||||
CloseAllWindows()
|
||||
UIParent:Hide()
|
||||
end
|
||||
if afkcam._ownname == "0" then
|
||||
SetCVar("UnitNameOwn", "1")
|
||||
end
|
||||
SetCVar("cameraYawMoveSpeed","8")
|
||||
MoveViewRightStart()
|
||||
afkcam.overlay:Show()
|
||||
afkcam.overlay.chat:Clear()
|
||||
afkcam._spinning = true
|
||||
end
|
||||
|
||||
function afkcam:stop()
|
||||
MoveViewRightStop()
|
||||
SetCVar("cameraYawMoveSpeed",afkcam._speed)
|
||||
SetCVar("UnitNameOwn", afkcam._ownname)
|
||||
SetView(4)
|
||||
|
||||
SetCVar("cameraCustomViewSmoothing", "1")
|
||||
|
||||
if not UIParent:IsVisible() and afkcam._ui_visible then
|
||||
UIParent:Show()
|
||||
end
|
||||
if pfUI.uf.player then pfUI.uf:RefreshUnit(pfUI.uf.player, "all") end
|
||||
afkcam.overlay:Hide()
|
||||
afkcam._spinning = false
|
||||
end
|
||||
|
||||
local delay = CreateFrame("Frame")
|
||||
delay:Hide()
|
||||
|
||||
delay:RegisterEvent("AUCTION_ITEM_LIST_UPDATE")
|
||||
delay:SetScript("OnEvent", function()
|
||||
this.delay = GetTime() + 10
|
||||
end)
|
||||
|
||||
delay:SetScript("OnUpdate", function()
|
||||
if ( this.tick or 0) > GetTime() then return else this.tick = GetTime() + 1 end
|
||||
|
||||
local name = UnitName("player")
|
||||
local cast = pfGetCastInfo(name)
|
||||
if not cast then cast = pfGetChannelInfo(name) end
|
||||
if not this.delay then this.delay = 0 end
|
||||
|
||||
if cast then
|
||||
this.delay = GetTime() + 10
|
||||
end
|
||||
|
||||
if this.delay < GetTime() then
|
||||
afkcam:start()
|
||||
this:Hide()
|
||||
end
|
||||
end)
|
||||
|
||||
afkcam:SetScript("OnEvent", function()
|
||||
if event == "CHAT_MSG_SYSTEM" then
|
||||
if (arg1 == _G.MARKED_AFK) or strfind(arg1, MARKED_AFK_CAPTURE) then
|
||||
delay:Show()
|
||||
elseif (arg1 == _G.CLEARED_AFK) then
|
||||
delay:Hide()
|
||||
this:stop()
|
||||
end
|
||||
else
|
||||
if this._spinning then
|
||||
delay:Hide()
|
||||
this:stop()
|
||||
end
|
||||
end
|
||||
end)
|
||||
|
||||
afkcam:RegisterEvent("CHAT_MSG_SYSTEM")
|
||||
afkcam:RegisterEvent("PLAYER_REGEN_DISABLED")
|
||||
afkcam:RegisterEvent("PLAYER_LEAVING_WORLD") -- reseting cvars on PLAYER_LOGOUT crashes the client ¯\_(ツ)_/¯
|
||||
end)
|
||||
Reference in New Issue
Block a user