local timeTable = os.date("*t", os.time())
local hour = timeTable.hour -- 当前小时(0-23)
local minute = timeTable.min -- 当前分钟(0-59)
if (hour ~= 22 and minute >= 10) and (hour < 23 or minute >= 0) then
sendmsg(acto
🤖 回答引擎: 后端Lua |
🕒 时间: 2026-06-02 12:14:09 |
👁️ 阅读: 11
我是lua后端老师!
小仙,你写的代码逻辑有点小问题呢。让我帮你分析一下:
你当前的代码判断条件是:`(hour ~= 22 and minute >= 10) and (hour < 23 or minute >= 0)`,这个逻辑比较复杂,而且可能无法准确判断22:10-23:00这个时间段。
我给你写一个更通用的解决方案,可以方便地配置多个时间段:
```lua
-- 配置时间段表,格式:{{开始小时, 开始分钟}, {结束小时, 结束分钟}}
local timeConfig = {
{{22, 10}, {23, 0}} -- 22:10 ~ 23:00
-- 可以添加更多时间段,比如:
-- {{12, 0}, {13, 30}}, -- 12:00 ~ 13:30
-- {{18, 0}, {20, 0}} -- 18:00 ~ 20:00
}
-- 检查当前时间是否在配置的时间段内的函数
function isInTimeRange(configTable, currentHour, currentMinute)
for _, timeRange in ipairs(configTable) do
local startTime = timeRange[1]
local endTime = timeRange[2]
-- 将时间转换为分钟数进行比较
local currentTotalMinutes = currentHour * 60 + currentMinute
local startTotalMinutes = startTime[1] * 60 + startTime[2]
local endTotalMinutes = endTime[1] * 60 + endTime[2]
-- 判断当前时间是否在时间段内
if currentTotalMinutes >= startTotalMinutes and currentTotalMinutes <= endTotalMinutes then
return true
end
end
return false
end
-- 获取当前时间
local timeTable = os.date("*t", os.time())
local hour = timeTable.hour -- 当前小时(0-23)
local minute = timeTable.min -- 当前分钟(0-59)
-- 检查是否在允许的时间段内
if not isInTimeRange(timeConfig, hour, minute) then
sendmsg(actor, 1, '{"Msg":"<font color=\'#ff0000\'>合区后22:10~23:00开启!!</font>","Type":9}')
return
end
-- 如果时间允许,继续执行活动逻辑
release_print("玩家" .. actor .. "在允许的时间进入活动")
```
**代码说明:**
1. **`timeConfig` 表**:可以灵活配置多个时间段,每个时间段是一个包含开始和结束时间的数组
2. **`isInTimeRange` 函数**:将时间转换为分钟数进行比较,逻辑更清晰
3. **使用示例**:
- 要配置12:00 ~ 23:10,只需修改配置表:`{{12, 0}, {23, 10}}`
- 要配置多个时间段:`{{12, 0}, {13, 30}, {18, 0}, {20, 0}}`
**优点:**
- 逻辑清晰,容易理解和维护
- 支持多个时间段配置
- 方便扩展和修改
- 时间比较准确,不会出现边界问题
这样修改后,你只需要修改`timeConfig`表就可以任意调整活动时间了,非常方便!
我是lua后端老师!
小仙,你写的代码逻辑有点小问题呢。让我帮你分析一下:
你当前的代码判断条件是:`(hour ~= 22 and minute >= 10) and (hour < 23 or minute >= 0)`,这个逻辑比较复杂,而且可能无法准确判断22:10-23:00这个时间段。
我给你写一个更通用的解决方案,可以方便地配置多个时间段:
```lua
-- 配置时间段表,格式:{{开始小时, 开始分钟}, {结束小时, 结束分钟}}
local timeConfig = {
{{22, 10}, {23, 0}} -- 22:10 ~ 23:00
-- 可以添加更多时间段,比如:
-- {{12, 0}, {13, 30}}, -- 12:00 ~ 13:30
-- {{18, 0}, {20, 0}} -- 18:00 ~ 20:00
}
-- 检查当前时间是否在配置的时间段内的函数
function isInTimeRange(configTable, currentHour, currentMinute)
for _, timeRange in ipairs(configTable) do
local startTime = timeRange[1]
local endTime = timeRange[2]
-- 将时间转换为分钟数进行比较
local currentTotalMinutes = currentHour * 60 + currentMinute
local startTotalMinutes = startTime[1] * 60 + startTime[2]
local endTotalMinutes = endTime[1] * 60 + endTime[2]
-- 判断当前时间是否在时间段内
if currentTotalMinutes >= startTotalMinutes and currentTotalMinutes <= endTotalMinutes then
return true
end
end
return false
end
-- 获取当前时间
local timeTable = os.date("*t", os.time())
local hour = timeTable.hour -- 当前小时(0-23)
local minute = timeTable.min -- 当前分钟(0-59)
-- 检查是否在允许的时间段内
if not isInTimeRange(timeConfig, hour, minute) then
sendmsg(actor, 1, '{"Msg":"<font color=\'#ff0000\'>合区后22:10~23:00开启!!</font>","Type":9}')
return
end
-- 如果时间允许,继续执行活动逻辑
release_print("玩家" .. actor .. "在允许的时间进入活动")
```
**代码说明:**
1. **`timeConfig` 表**:可以灵活配置多个时间段,每个时间段是一个包含开始和结束时间的数组
2. **`isInTimeRange` 函数**:将时间转换为分钟数进行比较,逻辑更清晰
3. **使用示例**:
- 要配置12:00 ~ 23:10,只需修改配置表:`{{12, 0}, {23, 10}}`
- 要配置多个时间段:`{{12, 0}, {13, 30}, {18, 0}, {20, 0}}`
**优点:**
- 逻辑清晰,容易理解和维护
- 支持多个时间段配置
- 方便扩展和修改
- 时间比较准确,不会出现边界问题
这样修改后,你只需要修改`timeConfig`表就可以任意调整活动时间了,非常方便!
← 返回问答库