变量名叫 a1、tmp2、zz:半年后线上出问题,排查者对着 zz = getplayvar(...) 猜了半小时它是"州"还是"站位"还是"资质"。命名是写给三个月后的自己看的注释——拼音频缩写(yj、sl、cs)在写下的一刻人人明白,三个月后只有上帝明白。错误写法:
local function f(a1, a2)
local tmp = getplayvar(a1, "HUMAN", a2)
local zz = tonumber(tmp) or 0
if zz > 100 then
sendmsg(a1, 1, "ok")
end
end
这段代码没有语法错误,只有阅读灾难。
命名三原则:见名知义(写全称不写缩写)、类型可辨(计数用 Cnt 结尾、时间戳用 At 结尾)、布尔用 is 或 has 开头。示例代码如下:
local function checkArenaReward(actor, arenaPointKey)
actor = getplayerbyname(actor)
local arenaPointCnt = tonumber(getplayvar(actor, "HUMAN", arenaPointKey)) or 0
local hasReward = arenaPointCnt > 100
if hasReward then
giveitem(actor, "金创药", 3)
sendmsg(actor, 1, "竞技点超过 100,奖励已发。")
end
end
本篇的新技术点是"后缀表意":PointCnt 一看是数量、At 一看是时间戳、hasReward 一看是布尔——后缀约定让类型信息不需要翻上下文。
三步验证:把误写版与规范版各跑一遍功能对齐;让另一名学员只看规范版函数复述业务逻辑,能说清即合格;全局搜索 tmp 与 a1,统计现存隐患数量,逐个重命名。
命名规范的下一层是表键规范:个人变量键同样见名知义并加系统前缀(Arena_、Shifu_),避免两个系统的同名键互踩。示例代码如下:
local function readSysVar(actor, sysName, key)
actor = getplayerbyname(actor)
return getplayvar(actor, "HUMAN", sysName .. "_" .. key)
end
全站技术干货持续更新:996 引擎 / Lua 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →
设计初衷 战场激励只有掉落与经验:打赢分东西、打输白来——牺牲与战功没有独立的记账,败仗连参与感都不剩。军功爵位设计:把战场…
设计初衷 传奇世界有地图、怪物与装备,唯独没有"可读的东西":背景故事躺在官网停更的设定集里,玩家与世界的情感联结缺一条文化…
底层原理 装备搭配的最优组合是组合爆炸:20 件挑 6 件约 3.8 万种组合,叠加多约束后枚举不可行。模拟退火借冶金退火的…
底层原理 把 n 个据点用最短的线路连成一张连通网(地图路网、节点布线),最小生成树给出总长最短的方案:每次从"已连接区"向…
设计初衷 玩家 ID 千篇一律的符号前缀,江湖人物没有江湖味;外号全靠玩家互喊,叫开了却没有名分,恶意起外号也没有约束。江湖…
业务场景 帮会人数封顶 200 后管理半径失控:总舵集合没人应、帮频刷屏、烈火剑法心得与广告混在一起没人理。帮会分舵封装:帮…