76 lines
2.4 KiB
Lua
76 lines
2.4 KiB
Lua
--------------------------------------------------------------------------------
|
|
-- OctoLatency for Vanilla WoW (1.12.1) - Author: Palladinpala
|
|
--------------------------------------------------------------------------------
|
|
|
|
-- Throttle timer to reduce CPU/performance overhead
|
|
local elapsedTimer = 0
|
|
local UPDATE_INTERVAL = 2.0 -- update every 2 seconds
|
|
|
|
function OctoLatency_OnLoad(self)
|
|
-- Register events
|
|
self:RegisterEvent("VARIABLES_LOADED")
|
|
|
|
-- Tooltip on hover
|
|
self:SetScript("OnEnter", function()
|
|
GameTooltip:SetOwner(this, "ANCHOR_TOP")
|
|
GameTooltip:AddLine("OctoLatency", 0, 1, 1)
|
|
local bandwidth, latency, homeLatency, worldLatency = GetNetStats()
|
|
GameTooltip:AddLine("Home Latency: " .. homeLatency .. " ms", 1, 1, 1)
|
|
GameTooltip:AddLine("World Latency: " .. worldLatency .. " ms", 1, 1, 1)
|
|
GameTooltip:AddLine("Bandwidth: " .. string.format("%.2f", bandwidth) .. " KB/s", 1, 1, 1)
|
|
GameTooltip:AddLine("Left-click and drag to move.", 0.7, 0.7, 0.7)
|
|
GameTooltip:Show()
|
|
end)
|
|
|
|
self:SetScript("OnLeave", function()
|
|
GameTooltip:Hide()
|
|
end)
|
|
end
|
|
|
|
function OctoLatency_OnUpdate(elapsed)
|
|
elapsedTimer = elapsedTimer + elapsed
|
|
if (elapsedTimer < UPDATE_INTERVAL) then
|
|
return
|
|
end
|
|
elapsedTimer = 0
|
|
|
|
-- GetNetStats returns: bandwidth, latency, homeLatency, worldLatency
|
|
local _, _, homeLatency, worldLatency = GetNetStats()
|
|
|
|
-- We'll display world latency (or max of home/world)
|
|
local latency = worldLatency or homeLatency or 0
|
|
|
|
-- Color thresholds: Green < 150ms, Yellow 150-350ms, Red > 350ms
|
|
local colorHex
|
|
if (latency < 150) then
|
|
colorHex = "|cff00ff00" -- Green
|
|
elseif (latency <= 350) then
|
|
colorHex = "|cffffff00" -- Yellow
|
|
else
|
|
colorHex = "|cffff0000" -- Red
|
|
end
|
|
|
|
OctoLatencyText:SetText(colorHex .. latency .. " ms|r")
|
|
end
|
|
|
|
function OctoLatency_SavePosition()
|
|
if (not OctoLatencyDB) then
|
|
OctoLatencyDB = {}
|
|
end
|
|
local point, relativeTo, relativePoint, xOfs, yOfs = OctoLatencyFrame:GetPoint()
|
|
OctoLatencyDB.point = point
|
|
OctoLatencyDB.relativePoint = relativePoint
|
|
OctoLatencyDB.xOfs = xOfs
|
|
OctoLatencyDB.yOfs = yOfs
|
|
end
|
|
|
|
-- Load saved position if available on PLAYER_LOGIN or VARIABLES_LOADED
|
|
local loadFrame = CreateFrame("Frame")
|
|
loadFrame:RegisterEvent("PLAYER_LOGIN")
|
|
loadFrame:SetScript("OnEvent", function()
|
|
if (OctoLatencyDB and OctoLatencyDB.point) then
|
|
OctoLatencyFrame:ClearAllPoints()
|
|
OctoLatencyFrame:SetPoint(OctoLatencyDB.point, UIParent, OctoLatencyDB.relativePoint, OctoLatencyDB.xOfs, OctoLatencyDB.yOfs)
|
|
end
|
|
end)
|