CHUAN2 DEV ENGINE
996 正版授权研发中心 · 360 授权合作教学中心 · 抖音传奇直播合作授权 · 快手推广运营商授权
OFFICIAL LICENSED ACADEMY 查验官方授权证书 →
// 威海旷世互娱教学基地 · 技术文章
入门夯实996引擎math.randomseed随机质量

【入门夯实】math.randomseed的随机质量:可复现与碰撞防控

2026-09-25 09:42 作者:996 技术组 0 阅读 996引擎Lua教程传奇脚本入门夯实996引擎Luamath.randomseed随机质量

学员常见误区

math.randomseed(os.time()) 是最常见的种子初始化写法,但多台服务器在同一秒启动时种子相同——所有服务器产生一致的随机序列,掉落与副本同步。另一个误区是用 math.randomseed(0) 做调试后忘记删除,上线后随机数全部固定。错误场景:

lua
math.randomseed(0)
local drop = math.random(1, 10000)

每次重启后 drop 恒定不变,掉落REPLACED可预测。

正确姿势

种子混合多源信息(时间戳加进程ID加机器标识)确保多机不碰撞。规范写法。示例代码如下:

lua
local function initRandom()
    local seed = os.time() * 1000 + math.floor(os.clock() * 1000)
    math.randomseed(seed)
end
initRandom()
local drop = math.random(1, 10000)

os.time 提供秒级精度,os.clock 补充毫秒级偏移,两者组合降低碰撞概率。示例代码如下:

lua
local function testRandom(count)
    local seen = {}
    local dup = 0
    for i = 1, count do
        local v = math.random(1, count)
        if seen[v] then
            dup = dup + 1
        end
        seen[v] = true
    end
    return dup
end

引擎验证

三步验证:initRandom 后连续生成 10000 个随机数的重复率低于 0.5%;两次 initRandom 之间间隔 1 秒种子不同;固定种子后同一序列可复现(调试场景利用)。

举一反三

需要可复现随机的场景(bug 复现、回放验证)反过来利用固定种子:记录出 bug 时的种子值,复现时用同一种子重放完整随机序列。示例代码如下:

lua
local function replayWithSeed(seed, count)
    math.randomseed(seed)
    local result = {}
    for i = 1, count do
        result[i] = math.random(1, 10000)
    end
    return result
end
作者履历与出处

本文由 996 技术组基于 996 引擎官方知识库与浮生梦老师课程体系整理。团队长期从事传奇类引擎 Lua 后端逻辑、客户端界面与商业版本交付,内容以官方知识库与真实项目为出处,按版本持续修订。

← 返回文章地图返回研学路径

最新技术文章 · 实战干货

LATEST ARTICLES

全站技术干货持续更新:996 引擎 / Lua 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →