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

如何修复Lua脚本解析错误:unexpected symbol near ')'

修复脚本解析错误的方案

错误原因分析

你的代码存在3处语法/逻辑问题,导致Lua解析失败:

  • 变量顺序错误:setMecano事件中,未定义xPlayer就先调用其方法
  • 语法结构不闭合:getInDuty回调的for循环内,两个if语句缺少对应的end,导致代码结构混乱
  • 变量大小写错误:xplayer ~= nil中的变量名应为xPlayer(Lua区分大小写)

修复后的完整代码

RegisterNetEvent('dillen_mecotablet:setMecano')
AddEventHandler('dillen_mecotablet:setMecano', function()
    -- 先获取玩家实例,再获取职位等级
    local xPlayer = ESX.GetPlayerFromId(source)
    local jobGrade = xPlayer.getJob().grade
    if xPlayer.getJob().name == 'taxi' then
        xPlayer.setJob('mecano', jobGrade)
    end
end)

ESX.RegisterServerCallback('dillen_mecotablet:getInDuty', function(source, callback)
    local player = ESX.GetPlayerFromId(source)
    local personalNumber = player.characterId
    local job = player.job['name']

    local coworkers = {}
    local Players = ESX.GetPlayers()

    for _, item in pairs(Players) do
        local xPlayer = ESX.GetPlayerFromId(_)

        -- 修正变量大小写,并闭合if语句
        if xPlayer ~= nil then
            if xPlayer['job']['name'] == job then
                table.insert(coworkers, {
                    name = xPlayer.character['firstname'] .. " " .. xPlayer.character['lastname'], 
                    phone = xPlayer.get('phoneNumber'),
                    grade_text = xPlayer["job"]["grade_label"]
                })
            end
        end
    end -- 补上for循环的闭合end

    callback(coworkers)
end)

关键修复点说明

  1. 调整变量顺序:在setMecano事件中,先通过ESX.GetPlayerFromId(source)获取玩家实例xPlayer,再调用其方法获取职位等级,避免未定义变量的错误
  2. 闭合语法结构:在getInDuty的for循环内,给if xPlayer ~= nil then添加对应的end,同时补上for循环的end,让代码结构完整
  3. 修正变量大小写:将xplayer改为xPlayer,符合Lua大小写敏感的特性,避免判断失效

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 00:17:17