FiveM中high_phone脚本mail.lua解析错误求助
FiveM high_phone脚本解析错误排查与修复
错误描述
解析@high_phone/server/mail.lua时出现语法错误,第792行提示需要')'以闭合第778行的'(',错误位置靠近end语句。
问题代码片段
MySQL.Async.fetchScalar("SELECT `id` FROM phone_mail WHERE `owner` = @owner AND `subject` = @subject ORDER BY `id` DESC LIMIT 1", {}, function(_ARG_0_) ({}).id = _ARG_0_ ;({}).subject = _UPVALUE1_ if "table" ~= type(_UPVALUE2_) or _UPVALUE2_ then end ;({}).recipients, ({})[1] = {}, _UPVALUE2_ ;({}).address = _UPVALUE3_.address ;({}).name = _UPVALUE3_.name ;({}).sender, ({}).photo = {}, _UPVALUE3_.photo ;({}).content = _UPVALUE4_ ;({}).time = _UPVALUE5_ ;({}).attachments = _UPVALUE6_ TriggerClientEvent("high_phone:receivedMail", _UPVALUE0_.source, {}) end end)
问题排查
- 括号不匹配:代码末尾存在两个
end,但MySQL.Async.fetchScalar仅需要一个end闭合回调函数,多余的end导致Lua解析器判定第778行的(未被正确闭合。 - 无效空表操作:多次使用
({}).xxx = ...的写法,每次({})都会创建新空表,赋值后直接丢弃,最终传给TriggerClientEvent的仍是空表{},既属于逻辑错误,也干扰了语法结构识别。
修复后的代码
MySQL.Async.fetchScalar("SELECT `id` FROM phone_mail WHERE `owner` = @owner AND `subject` = @subject ORDER BY `id` DESC LIMIT 1", {}, function(_ARG_0_) local mailData = {} mailData.id = _ARG_0_ mailData.subject = _UPVALUE1_ -- 修正收件人逻辑:若_UPVALUE2_非表或为空,初始化空收件人表 if type(_UPVALUE2_) ~= "table" or not _UPVALUE2_ then mailData.recipients = {} else mailData.recipients = _UPVALUE2_ end mailData.address = _UPVALUE3_.address mailData.name = _UPVALUE3_.name mailData.sender = { photo = _UPVALUE3_.photo } mailData.content = _UPVALUE4_ mailData.time = _UPVALUE5_ mailData.attachments = _UPVALUE6_ TriggerClientEvent("high_phone:receivedMail", _UPVALUE0_.source, mailData) end)
关键修复点
- 移除多余的第二个
end,解决括号不匹配的语法错误。 - 创建统一的
mailData表存储邮件数据,替代无效的空表赋值操作,确保数据能正确传递给客户端事件。 - 修正
if条件逻辑,修复原逻辑判断的漏洞。
内容的提问来源于stack exchange,提问作者Dominik
相关产品推荐
相关产品推荐

