局部变量跑完就没;系统变量写进服务器数据库,全服共享、重启还在。
| 变量 | 写法 / 归属 | 存哪 | 谁能用 |
|---|---|---|---|
| 全局变量 | 不写 local | Lua 虚拟机 | 脚本内到处 |
| 局部变量 | local n | 栈 | 当前作用域 |
| 系统变量 | SetSys / GetSys | 服务器库 | 全服 |
| 个人变量 | 对象上读写 | 玩家库 | 该角色 |
口诀:要共享、持久 → 系统变量;要跟着人走 → 个人变量;要又快又短命 → 局部。
同一时刻只跑一个触发。你写死循环 100 万次,后面玩家全排队。
耗时要按毫秒控;高频触发更要短平快。这也是优先 local 的原因:栈上分配,出作用域就扔,比全局/数据库快。
新三端(驼峰式)大致是:
-- 设置 / 读取(名称以引擎说明书为准)
SetSysInt("测试变量一", 12345)
print(GetSysInt("测试变量一")) --> 12345
未设置时读 int:返回 0,不报错、不是 nil。
数字类型没有值就当 0。
function LuaRun(actor, ...)
local n = GetSysInt("全服跑步统计") or 0
n = n + 1
SetSysInt("全服跑步统计", n)
print("全服已跑", n, "步")
end
两个端同时跑,数字是接上的——系统变量是全服共享。
function LuaRun(actor, ...)
local n = (GetSysInt("跑步步数") or 0) + 1
SetSysInt("跑步步数", n)
if n > 10 then
SetSysInt("跑步步数", 0)
GiveItem(actor, "木剑", 1)
end
end
适合:全服首杀、击杀统计、活动累计、排行榜计数。
SetSysStr("公告", "开服大吉")
print(GetSysStr("公告"))
未设置时读 string:返回空字符串 "",不是 nil。
所以直接拼接会“像报错”:
local s = GetSysStr("计数") -- 可能是 ""
-- s + 1 -- 空字符串不能直接当数字加
稳妥写法:
local s = GetSysStr("计数")
if s == "" then s = "0" end
local n = tonumber(s) or 0
tonumber("你好") → nil(不是数字串);tostring(123) → "123"。
接口只吃字符串。表先转 JSON:
local T = {1,2,3,4,5}
local json = TableToJson(T) -- 名称以说明书为准
SetSysStr("存储表格", json)
local raw = GetSysStr("存储表格")
local T2 = JsonToTable(raw)
for k, v in pairs(T2) do
print(k, v)
end
JSON 里字符串用双引号;Lua 单引号在 JSON 里不认,长字符串 [[...]] 包一层更稳。
function LuaRun(actor, ...)
local name = GetBaseInfo(actor, 1)
local raw = GetSysStr("跑步榜")
local t = (raw == "" or raw == nil) and {} or (JsonToTable(raw) or {})
t[name] = (t[name] or 0) + 1
SetSysStr("跑步榜", TableToJson(t))
print(name, t[name])
end
短路初始化:t = (raw == "") and {} or JsonToTable(raw)。
数字常更占空间小、算得快;汉字/长字符串更吃资源。
业务能用 int 表达的,别硬塞字符串。
今日练习:写全服跑步计数;再用 JSON 表按角色名记步数,双端同时验证是否共享。
全站技术干货持续更新:996 引擎 / Lua 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →
局部变量跑完就没; 系统变量 写进服务器数据库,全服共享、重启还在。 一、四种变量先分清 变量 写法 / 归属 存哪 谁能用…
写代码少打 local 很爽,内存会哭。这节把 栈/堆 和 作用域 一次讲清。 一、栈和堆 栈 堆 -- ---- ----…
循环除了 for i=1, t ,还有 迭代器 。数组用 ipairs ,字典用 pairs 。 一、回顾 for 循环 二…
模块就是 工具箱 。后端命令八百多个,记不住很正常——把自己常用的封装起来,按名字调用。 一、include 与 requi…
会判断了,就能做会回话的 NPC。今天拼一个简易 GM 工具界面。 一、用 say 吐出界面 客户端编辑器 Ctrl + F…
与或非听起来玄,其实就是三张通行证。 一、and(与)= 过安检 机票 + 身份证 ,少一样不让过。后面还能无限加条件。 二…