把 math.random() 的返回值当整数用——不带参数时它返回 0 到 1 之间的小数,直接拿去计数或比较区间全是错的;另外 random(5, 1) 这种起点大于终点的写法、random(0) 的零区间,都会直接报 bad argument。错误场景:
print(math.random())
输出 0.286902 之类的小数——想要的是 1 到 100 的整数掷点,拿到的是小数。
要整数必须带参数:random(n) 得 1 到 n,random(m, n) 得 m 到 n(含两端)。规范写法。示例代码如下:
local roll = math.random(1, 100)
if roll <= 30 then
sendmsg(actor, 1, "触发烈火剑法双倍伤害。")
end
1 到 100 掷点、30% 概率判定——形态用对,概率才有意义。
三步验证:裸调 random() 观察小数输出,确认不带参的形态;故意调 random(5, 1) 与 random(0) 复现 bad argument 报错并记住提示语;改成 random(1, 100) 循环一万次统计 30 以下的频率,结果落在 30% 附近验证均匀性。
需要精细小概率(如千分之五的暴率)时,用无参形态的小数配合阈值判断。示例代码如下:
local rare = math.random() < 0.005
print(rare)
0.005 即五千分之一——整数掷点表达不了的概率刻度,小数形态刚好补位。
全站技术干货持续更新:996 引擎 / Lua 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →
【游戏】 一、一行代码拆解:hp = 10000 + teamN 5000 —— 运镖劫镖的全部骨架:镖车按护送人数增强血量…
【语法】 一、隐蔽陷阱:逐个插入建堆要 n 次上浮;自底向上从末个非叶子节点倒序下沉,一遍线性把乱序表调成合法堆。 二、底层…
【语法】 一、抛坑提问:一个数等于它全部真因子之和就叫真因子和数,6 等于 1 加 2 加 3——判定只需枚举到平方根配对求…
【游戏】 一、一行代码拆解:n = math.floor(have / 5) —— 批量合成的全部骨架:5 个碎片合成 1 …
【游戏】 一、一行代码拆解:if INSURED[actor] then 赔付 end —— 装备保险的全部骨架:死亡掉落判…
【语法】 一、隐蔽陷阱:找第 K 小元素先全量排序再取下标,n log n 浪费在无关排序上;快速选择借用快排分区——每轮只…