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

FiveM ESX Legacy框架运行脚本报vector3(...) argument 1 had type nil求助

问题根因定位

报错vector3(...) argument 1 had type nil的核心原因是ESX框架内部将传入的坐标参数转换为vector3类型时,读取到了空值,具体对应你代码中的几种可能场景:

  • 调用spawnEndObject时传入的x/y/z坐标参数存在空值,逐层传递到deleteLastObject后,传给ESX.Game.GetClosestObject的坐标表中存在nil字段,框架转vector3时报错
  • 你使用的二次修改版ESX Legacy调整了ESX.Game.GetClosestObject的参数要求,新版本第二个参数需要直接传入vector3类型,不兼容你当前写的{x=x,y=y,z=z}表结构,框架解析坐标时读取到nil值
  • 你修改ESX框架时改动了ESX.Game.GetClosestObject的坐标解析逻辑,导致坐标字段读取错误拿到nil
修复方案
  1. 首先修改deleteLastObject函数,增加参数合法性校验,避免空值传入,同时兼容ESX的参数要求:
function deleteLastObject(object_end, x, y, z)
    -- 校验参数合法性,任意为空直接终止执行避免报错
    if not object_end or not x or not y or not z then return end
    local targetCoords = vector3(x, y, z)
    local closestObj = ESX.Game.GetClosestObject(object_end, targetCoords)
    -- 额外校验找到的物体是否存在,避免删除空实体报错
    if closestObj and DoesEntityExist(closestObj) then
        ESX.Game.DeleteObject(closestObj)
    end
end
  1. 同步修改spawnEndObject函数,增加入参校验同时替换弃用API:
function spawnEndObject(object_start, object_end, x, y, z)
    -- 入参合法性校验
    if not isActionStarted or not object_start or not object_end or not x or not y or not z then return end
    ESX.Game.SpawnObject(object_end, vector3(x, y, z), function(obj)
        deleteLastObject(object_start, x, y, z) -----------> line 257
        -- 弃用的GetPlayerPed(-1)替换为原生稳定接口PlayerPedId()
        SetEntityHeading(obj, GetEntityHeading(PlayerPedId()))
        PlaceObjectOnGroundProperly(obj)
    end)
end
  1. 如果你自行修改过ESX的ESX.Game.GetClosestObject实现,可核对原生逻辑:官方原版ESX Legacy的该函数第二个参数同时支持坐标表和vector3两种格式,如果你修改后仅支持vector3,按上述写法统一传vector3即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 14:06:04