You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Lua新手求助:如何随机化表中多组x/y/z值并解决报错

Lua新手求助:如何随机化表中的x、y、z值?

我是Lua新手,代码有问题还请见谅。我一直尝试随机化表中的x、y、z值但未成功,同时还遇到了报错,请问该如何实现?

报错信息

Error loading script jobs/poolworker.lua in resource esx_jobs: @esx_jobs/jobs/poolworker.lua:156: attempt to index a nil value (global 'Delivery')

当前脚本代码

Config.Jobs.slaughterer = {
    Delivery = {
        Pos = {x,y,z},
        
        Color = {r = 50, g = 200, b = 50},
        Size = {x = 5.0, y = 5.0, z = 3.0},
        Marker = 1,
        Blip = true,
        Name = _U('delivery_point'),
        Type = 'delivery',
        Spawner = 1,
        Item = {
            {
                name = _U('delivery'),
                time = 0.5,
                remove = 1,
                max = 100, -- if not present, probably an error at itemQtty >= item.max in esx_jobs_sv.lua
                price = 13,
                requires = 'bottle',
                requires_name = _U('chl_bottle'),
                drop = 100
            }
        },
        Hint = _U('p_deliver_button')
    }
}

test = {x = 162.329666,  y = -194.452744, z = 54.217529}
if delivery == 1 then
    table.insert(Delivery[1]["Pos"], test)
elseif delivery == 2 then
    table.insert(Delivery[1]["Pos"], test)
end

问题分析与解决方法

1. 修复Delivery全局变量未定义的报错

你直接使用Delivery是错误的,它是Config.Jobs.slaughterer下的子表,必须通过完整路径访问:

-- 错误写法
table.insert(Delivery[1]["Pos"], test)
-- 正确写法
table.insert(Config.Jobs.slaughterer.Delivery.Pos, test)

另外Delivery本身不是数组,不需要加[1],直接通过Config.Jobs.slaughterer.Delivery.Pos访问坐标表即可。

2. 实现x、y、z值的随机化

利用Lua的math.random()函数生成指定范围内的随机坐标,示例如下:

-- 生成带小数的随机坐标(模拟精确位置)
local randomPos = {
    x = math.random(150, 170) + math.random(),
    y = math.random(-200, -190) + math.random(),
    z = math.random(54, 55) + math.random()
}

-- 若Pos是单个坐标,直接替换
Config.Jobs.slaughterer.Delivery.Pos = randomPos
-- 若Pos是存储多个坐标的数组,插入新坐标
table.insert(Config.Jobs.slaughterer.Delivery.Pos, randomPos)

3. 其他细节修正

  • 初始代码中Pos = {x,y,z}里的x,y,z未定义,会产生nil值,建议初始化为空数组或默认坐标:Pos = {} 或 Pos = {x=0, y=0, z=0}
  • delivery变量未定义,需要先赋值再进行判断,比如添加local delivery = 1

内容的提问来源于stack exchange,提问作者Bakaguya

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 06:24:33