📄 clock.lua
字号:
--[[
Clock
- This BETA to test stage.
]]
ClockState = { };
Clock_Enable = 1;
Clock_OffsetHour = 0;
Clock_OffsetMinute = 0;
Clock_MilitaryTime = 0;
Clock_Freeze = 0;
Clock_DisplaySec = 0;
InitialRun = 1;
local SecondCount = 0;
local LastMinute = 0;
local CurrentSecond = 0;
local UpdateTime = 0;
CLOCK_UPDATE_RATE = 0.1;
local lBeingDragged;
function Clock_OnLoad()
this:RegisterForDrag("LeftButton");
this:RegisterEvent("VARIABLES_LOADED");
ClockFrame.TimeSinceLastUpdate = 0;
end
function Clock_Reset()
ClockFrame:ClearAllPoints();
ClockFrame:SetPoint("TOPLEFT", "UIParent", "TOPRIGHT", -156, -170);
end
function Clock_OnUpdate(arg1)
Clock_DisplaySec_Update(arg1);
ClockFrame.TimeSinceLastUpdate = ClockFrame.TimeSinceLastUpdate + arg1;
if( ClockFrame.TimeSinceLastUpdate > CLOCK_UPDATE_RATE ) then
ClockText:SetText(Clock_GetTimeText());
ClockFrame.TimeSinceLastUpdate = 0;
end
end
function Clock_OnEvent()
if( event == "VARIABLES_LOADED" ) then
Clock_LoadConfig();
end
end
function Clock_LoadConfig()
if( not ClockState ) then
ClockState = { };
end
if( not ClockState.Enable ) then
ClockState.Enable = 1;
end
if( not ClockState.OffsetHour ) then
ClockState.OffsetHour = 0;
end
if( not ClockState.OffsetMinute ) then
ClockState.OffsetMinute = 0;
end
if( not ClockState.MilitaryTime ) then
ClockState.MilitaryTime = 0;
end
if( not ClockState.Freeze ) then
ClockState.Freeze = 0;
end
if( not ClockState.DisplaySec ) then
ClockState.DisplaySec = 0;
end
Clock_Enable = ClockState.Enable;
if( Clock_Enable == 0 ) then
ClockFrame:Hide();
end
Clock_OffsetHour = ClockState.OffsetHour;
Clock_OffsetMinute = ClockState.OffsetMinute;
Clock_MilitaryTime = ClockState.MilitaryTime;
Clock_Freeze = ClockState.Freeze;
Clock_DisplaySec = ClockState.DisplaySec;
Clock_Register();
end
function Clock_Register()
gLim_RegisterButton (
"Mini Clock",
"迷你时钟",
"Interface\\AddOns\\Clock\\Icon",
function()
gLimModSecBookShowConfig("gLimClock");
end,
1,
4
);
gLim_RegisterConfigClass(
"gLimClock",
"Mini Clock",
"黑眼圈"
);
gLim_RegisterConfigSection(
"gLimClockSection",
"迷你时钟",
CLOCK_WINDOW_CONFIG_TEXT.." by 黑眼圈(gLim开发小组)",
"黑眼圈",
"gLimClock");
gLim_RegisterConfigCheckBox(
"gLim_Clock_Enable",
CLOCK_WINDOW_DISPLAY_CLOCK,
CLOCK_WINDOW_DISPLAY_CLOCK_INFO,
Clock_Enable,
ClockDisplay,
"gLimClock"
);
gLim_RegisterConfigCheckBox(
"gLim_Clock_Format",
CLOCK_WINDOW_FORMAT_CLOCK,
CLOCK_WINDOW_FORMAT_CLOCK_INFO,
Clock_MilitaryTime,
ClockFormat,
"gLimClock"
);
gLim_RegisterConfigCheckBox(
"gLim_Clock_Freeze",
CLOCK_WINDOW_FREEZE_CLOCK,
CLOCK_WINDOW_FREEZE_CLOCK_INFO,
Clock_Freeze,
ClockFreeze,
"gLimClock"
);
gLim_RegisterConfigCheckBox(
"gLim_Clock_DisplaySec",
CLOCK_WINDOW_SHOWSEC_CLOCK,
CLOCK_WINDOW_SHOWSEC_CLOCK_INFO,
Clock_DisplaySec,
ClockDisplaySec,
"gLimClock"
);
gLim_RegisterConfigSlider(
"gLim_Clock_OffsetHour",
"设置偏移时差(小时)",
CLOCK_WINDOW_OFFSETHOUR,
CLOCK_WINDOW_OFFSETHOUR,
"小时",
1,
-12,
12,
Clock_OffsetHour,
ClockOffsetHour,
"gLimClock"
);
gLim_RegisterConfigSlider(
"gLim_Clock_OffsetMinute",
"设置偏移时差(分钟)",
CLOCK_WINDOW_OFFSETMINUTE,
CLOCK_WINDOW_OFFSETMINUTE,
"分钟",
1,
0,
60,
Clock_OffsetMinute,
ClockOffsetMinute,
"gLimClock"
);
end
function Clock_OnDragStart()
if( Clock_Freeze ~= 1 ) then
ClockFrame:StartMoving()
lBeingDragged = 1;
end
end
function Clock_OnDragStop()
ClockFrame:StopMovingOrSizing()
lBeingDragged = nil;
end
function ClockDisplay()
if ( Clock_Enable == 1 ) then
ClockFrame:Hide();
Clock_Enable = 0;
ClockState.Enable = 0;
else
ClockFrame:Show();
Clock_Enable = 1;
ClockState.Enable = 1;
end
end
function ClockFormat()
if ( Clock_MilitaryTime == 1 ) then
Clock_MilitaryTime = 0;
ClockState.MilitaryTime = 0;
else
Clock_MilitaryTime = 1;
ClockState.MilitaryTime = 1;
end
end
function ClockFreeze()
if ( Clock_Freeze == 1 ) then
Clock_Freeze = 0;
ClockState.Freeze = 0;
else
Clock_Freeze = 1;
ClockState.Freeze = 1;
end
end
function ClockDisplaySec()
if ( Clock_DisplaySec == 1 ) then
Clock_DisplaySec = 0;
ClockState.DisplaySec = 0;
else
Clock_DisplaySec = 1;
ClockState.DisplaySec = 1;
InitialRun = 1;
end
end
function ClockOffsetHour(OffsetHour)
--local OffsetHour = this:GetValue();
if ( Clock_OffsetHour ) then
Clock_OffsetHour = OffsetHour;
ClockState.OffsetHour = OffsetHour;
end
end
function ClockOffsetMinute(OffsetMinute)
--local OffsetMinute = this:GetValue();
if ( Clock_OffsetMinute ) then
Clock_OffsetMinute = OffsetMinute;
ClockState.OffsetMinute = OffsetMinute;
end
end
function Clock_GetTimeText()
local hour, minute = GetGameTime();
local pm;
hour = hour + Clock_OffsetHour;
minute = minute + Clock_OffsetMinute;
if( minute > 59 ) then
minute = minute - 60;
hour = hour + 1;
elseif( minute < 0 ) then
minute = 60 + minute;
hour = hour - 1;
end
if( hour > 23 ) then
hour = hour - 24;
elseif( hour < 0 ) then
hour = 24 + hour;
end
if( Clock_MilitaryTime ~= 0 ) then
if( ( Clock_DisplaySec == 1 ) and ( InitialRun == 0 ) ) then
return format(TEXT(CLOCK_TIME_TWENTYFOURHOURSSECONDS), hour, minute, SecondCount);
else
return format(TEXT(CLOCK_TIME_TWENTYFOURHOURS), hour, minute);
end
else
if( hour >= 12 ) then
pm = 1;
hour = hour - 12;
else
pm = 0;
end
if( hour == 0 ) then
hour = 12;
end
if( pm == 0 ) then
if( ( Clock_DisplaySec == 1 ) and ( InitialRun == 0 ) ) then
return format(TEXT(CLOCK_TIME_TWELVEHOURSECONDSAM), hour, minute, SecondCount);
else
return format(TEXT(CLOCK_TIME_TWELVEHOURAM), hour, minute);
end
else
if( ( Clock_DisplaySec == 1 ) and ( InitialRun == 0 ) ) then
return format(TEXT(CLOCK_TIME_TWELVEHOURSECONDSPM), hour, minute, SecondCount);
else
return format(TEXT(CLOCK_TIME_TWELVEHOURPM), hour, minute);
end
end
end
end
local function Clock_FormatPart(fmt, val)
local part;
part = format(TEXT(fmt), val);
if( val ~= 1 ) then
part = part.."s";
end
return part;
end
function Clock_FormatTime(time)
local d, h, m, s;
local text = "";
local skip = 1;
d, h, m, s = ChatFrame_TimeBreakDown(time);
if( d > 0 ) then
text = text..Clock_FormatPart(CLOCK_TIME_DAY, d)..", ";
skip = 0;
end
if( (skip == 0) or (h > 0) ) then
text = text..Clock_FormatPart(CLOCK_TIME_HOUR, h)..", ";
skip = 0;
end
if( (skip == 0) or (m > 0) ) then
text = text..Clock_FormatPart(CLOCK_TIME_MINUTE, m)..", ";
skip = 0;
end
if( (skip == 0) or (s > 0) ) then
text = text..Clock_FormatPart(CLOCK_TIME_SECOND, s);
end
return text;
end
function Clock_DisplaySec_Update(elapsed)
local DoUpdate = 0;
if ( Clock_DisplaySec ~= 0 ) and ( Clock_DisplaySec >= 1) then
CurrentSecond = CurrentSecond + elapsed;
if( InitialRun == 1 ) then
local CurrentHour, CurrentMinute = GetGameTime();
LastMinute = CurrentMinute;
InitialRun = 2;
end
if( CurrentSecond >= 1 ) then
CurrentSecond = CurrentSecond - 1;
SecondCount = SecondCount + 1;
if( SecondCount >= 60 ) then
SecondCount = 0;
DoUpdate = 1;
end
if ( DoUpdate == 1 ) then
-- fractions of seconds are lost every time the game lags,
-- this should keep track of that.
local CurrentTime = GetTime();
updateTime = CurrentTime;
local SecondOffset = ((CurrentTime - 60) - updateTime )/2;
CurrentSecond = SecondOffset;
DoUpdate = 0;
end
if( InitialRun == 2 ) then
local CurrentHour, CurrentMinute = GetGameTime();
if( CurrentMinute ~= LastMinute ) then
updateTime = GetTime();
SecondCount = 1;
InitialRun = 0;
LastMinute = CurrentMinute;
end
end
end
end
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -