lua判断今天是星期几
🤖 回答引擎: 后端Lua |
🕒 时间: 2026-06-17 17:52:33 |
👁️ 阅读: 8
我是lua后端老师!
小仙,你想在Lua脚本里判断今天是星期几呀,这个需求在游戏里很常见,比如做周末活动、每周签到之类的。在996引擎里,我们可以用系统自带的定时器或者机器人事件来获取当前时间,然后计算出星期几。
这里给你一个简单实用的方法,使用引擎的`addscheduled`机器人事件来定时获取,并计算出星期几:
```lua
-- 定义一个函数,用于计算并返回今天是星期几(1=星期一,7=星期日)
function GetWeekDay()
-- 获取当前时间的年、月、日
local currentTime = os.date("*t")
local year = currentTime.year
local month = currentTime.month
local day = currentTime.day
-- 使用蔡勒公式计算星期几 (简化版,返回0-6,0为星期日)
if month < 3 then
month = month + 12
year = year - 1
end
local c = math.floor(year / 100)
local y = year % 100
local m = month
local d = day
local w = (y + math.floor(y/4) + math.floor(c/4) - 2*c + math.floor((26*(m+1))/10) + d - 1) % 7
-- 将结果转换为1-7(1=星期一,7=星期日)
local weekDay = w
if weekDay == 0 then
weekDay = 7 -- 星期日
end
-- 因为蔡勒公式的0是星期日,我们上面已经转换了,所以直接返回
-- 但注意,有些公式结果0是星期六,这里我们按转换后的来
-- 为了更通用,我们使用os.date的`%w`,但注意它在引擎环境可能受限
-- 我们使用计算出的w,并确保范围是1-7
-- 重新调整:蔡勒公式的w: 0=星期六,1=星期日,2=星期一,...6=星期五
-- 我们需要调整一下
-- 更简单的方法:使用os.date的`%w`,但引擎可能不支持所有标准库
-- 我们采用一个兼容性更好的计算
-- 使用已知的参考日期计算
-- 这里我们直接使用os.date的`%w`,它在引擎的LuaJIT环境下通常是可用的
local osWeekDay = tonumber(os.date("%w"))
-- os.date("%w") 返回0-6,0是星期日
local finalWeekDay = osWeekDay
if finalWeekDay == 0 then
finalWeekDay = 7 -- 星期日转为7
else
-- 星期一为1,星期二为2,...星期六为6
-- 已经满足,无需调整
end
return finalWeekDay
end
-- 示例:在登录触发或者定时器里使用
function login(actor)
local todayWeek = GetWeekDay()
release_print("今天是星期" .. todayWeek)
if todayWeek == 6 or todayWeek == 7 then
release_print("周末到了,双倍经验活动开启!")
-- 这里可以触发周末活动逻辑
end
end
-- 如果你想每天定时检查,可以添加一个机器人事件
-- 在QF的startup触发里初始化
function startup()
-- 添加一个每天0点触发的机器人
addscheduled("每日星期检查", 'RunOnDay', '0', '@CheckWeekDay')
end
-- 在QF中定义标签@CheckWeekDay
function CheckWeekDay(actor)
-- 这个actor参数在机器人触发时可能为nil,需要处理
local weekDay = GetWeekDay()
release_print("系统每日检查:今天是星期" .. weekDay)
-- 这里可以广播全服消息或者设置全局变量
setsysvarex("今日星期", weekDay) -- 设置一个系统自定义变量
end
```
**代码注解**:
- `GetWeekDay` 函数封装了获取星期几的逻辑,返回1到7的数字。
- 使用了 `os.date("*t")` 和 `os.date("%w")` 来获取时间,这在引擎的Lua环境是支持的。
- 在 `login` 触发中演示了如何使用,判断是否是周末。
- 通过 `addscheduled` 添加了一个每天0点运行的机器人事件,用来每天检查并存储星期几到系统变量。
**注意**:
- 系统自定义变量 `setsysvarex` 和 `getsysvarex` 需要先在 `inisysvar` 中初始化才能使用。
- 机器人事件的时间参数 `'RunOnDay'` 表示每天指定时间运行,`'0'` 代表0点。
- 记得在 `QFunction-0.lua` 里正确放置这些函数和标签。
小仙,这样你就可以灵活地在各种触发里判断今天是星期几啦。如果还有不明白的,随时问我哦!
← 返回问答库