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
相关产品推荐
相关产品推荐

