G 数字型全局变量.重启服务器保存.1000个(G0 - G999) (超过499为自定义全局变量) 用这个变量和globalinfo(3)判断新区合区当晚(20:00~21:00)老区每天攻沙这两个区怎么写这个G变量在哪里有
🤖 回答引擎: 后端Lua |
🕒 时间: 2026-05-20 14:12:56 |
👁️ 阅读: 8
我是lua后端老师!
小仙,你问的是全局变量G系列和新区合区判断的问题。根据资料,这里有几个关键点:
1. **全局变量G系列**:G0-G999是数字型全局变量,重启服务器会保存,超过G499的是自定义全局变量
2. **新区合区判断**:可以使用`globalinfo(3)`来获取相关信息
让我给你一个完整的示例,如何设置和获取G变量,并结合新区合区判断:
```lua
-- 在服务端启动时初始化需要的全局变量
function startup(sysobj)
-- 初始化系统自定义变量(用于合区判断)
inisysvar("integer", "系统变量_合区状态", 0) -- 0:未合区 1:已合区
inisysvar("integer", "系统变量_攻沙状态", 0) -- 0:未攻沙 1:已攻沙
-- 设置G变量(G变量是数字型全局变量,重启保存)
-- 这里以G500为例(超过499为自定义全局变量)
setsysvarex("G500", 0) -- 设置G500的值为0
end
-- 判断新区合区当晚(20:00~21:00)
function checkNewArea(actor)
local globalInfo = globalinfo(3) -- 获取全局信息
-- 获取当前时间
local currentTime = os.date("%H:%M")
local hour = tonumber(os.date("%H"))
-- 检查是否是20:00-21:00
if hour >= 20 and hour < 21 then
-- 检查是否是新区合区
local gValue = getsysvarex("G500") -- 获取G500的值
release_print("当前G500变量值:", gValue)
if globalInfo == "新区合区" then -- 这里需要根据实际globalinfo返回值判断
say(actor, "当前是新区合区当晚20:00-21:00")
setsysvarex("G500", 1) -- 设置标记
else
say(actor, "当前是老区日常攻沙时间")
setsysvarex("G500", 2) -- 设置不同标记
end
else
say(actor, "当前不是攻沙时间段(20:00-21:00)")
end
end
-- 检查G变量状态
function checkGVariable(actor)
local gValue = getsysvarex("G500")
local globalInfo = globalinfo(3)
if gValue == 1 then
say(actor, "当前是新区合区状态")
elseif gValue == 2 then
say(actor, "当前是老区攻沙状态")
else
say(actor, "G变量未设置或为默认值")
end
release_print("G500 =", gValue, "globalinfo(3) =", globalInfo)
end
```
**关键说明:**
1. **G变量位置**:G变量是全局变量,通过`setsysvarex`和`getsysvarex`函数来设置和获取
2. **变量范围**:G0-G999都是数字型全局变量,重启服务器会保存
3. **自定义变量**:超过G499(即G500-G999)是自定义全局变量
4. **合区判断**:需要结合`globalinfo(3)`的返回值来判断当前服务器状态
**使用方法:**
- 在`startup`触发中初始化需要的变量
- 在需要判断的时间点(如20:00)调用`checkNewArea`函数
- 通过`checkGVariable`函数查看当前状态
不懂的可以问浮生梦尊师哦!
← 返回问答库