[2026/3/26 1:06:12] CallLua1 Func:run 2 luaErr:.\Envir\Market_Def\QFunction-0.lua:388: attempt to concatenate local 'result' (a nil value)
stack traceback:
.\Envir\Market_Def\QFunction-0.lua:388: in function <.\Envir\Market_Def\QFunction-0.lua:385>
我是Lua后端老师!
小仙,我来帮你分析一下为什么`result`是nil。从你提供的代码来看,问题出在`run`函数中:
```lua
function run(actor)
local aaa= include("QuestDiary/ylh/新人触发.lua")
local result = aaa:main(actor)
p("xxxxxx"..p("xxxxxx:"..tostring(result)))
end
```
错误信息显示在第388行:`attempt to concatenate local 'result' (a nil value)`。这意味着`result`确实是nil,所以`tostring(result)`返回"nil",然后你尝试用`p("xxxxxx"..p("xxxxxx:"..tostring(result)))`来拼接字符串,但这里有个问题!
仔细看你的代码,`p("xxxxxx"..p("xxxxxx:"..tostring(result)))`这行代码有两个问题:
1. 你嵌套调用了`p()`函数,这会导致`p("xxxxxx:"..tostring(result))`的返回值作为字符串拼接的一部分
2. 如果`p()`函数没有返回值(返回nil),那么`"xxxxxx"..nil`就会报错
但是,更根本的原因是:你的`新人触发.lua`中的`main`函数在某些情况下没有返回值!
看看你的`新人触发.lua`:
- 当玩家是新人时(flagValue == 0),函数执行到最后没有`return`语句
- 当玩家不是新人时,函数有`return`语句
在Lua中,函数如果没有显式返回值,默认返回nil。所以当玩家是新人时,`newcomer:main(actor)`执行完毕但没有返回任何值,所以`result`就是nil。
修复方法很简单,在`main`函数的最后加上一个返回值:
```lua
function newcomer:main(actor)
-- ... 你的原有代码 ...
release_print("新人登录检测脚本执行完毕。")
return true -- 或者返回其他有意义的值
end
```
另外,建议你修改`run`函数中的打印语句,避免嵌套调用:
```lua
function run(actor)
local aaa = include("QuestDiary/ylh/新人触发.lua")
local result = aaa:main(actor)
release_print("xxxxxx:" .. tostring(result))
end
```
记住小仙,在Lua中函数默认返回nil,所以如果你希望函数有返回值,一定要显式地使用`return`语句。不懂的可以问浮生梦尊师哦!