-- buff消息
buff_msg = function(actor, targe, msg1, msg2)
-- 检查攻击者是否需要显示提示
if hasbuff(actor, 40000) and msg1 ~= "" then
local msg = '{"Msg":"' .. msg1 .. '","FColor":255,"BColor":219,"Type":1}'
sendmsg(actor,
🤖 回答引擎: 后端Lua |
🕒 时间: 2026-06-18 14:36:08 |
👁️ 阅读: 4
我是lua后端老师!
小仙,看到你的报错信息了,问题出在 `buff_msg` 函数里的 `sendmsg` 调用上。
报错信息 `attempt to concatenate local 'msg1' (a nil value)` 意思是:尝试拼接一个为 `nil`(空值)的局部变量 `msg1`。
让我们仔细看看你的代码:
在 `buff_msg` 函数里,你写了:
```lua
local msg = '{"Msg":"' .. msg1 .. '","FColor":255,"BColor":219,"Type":1}'
sendmsg(actor, 1, msg)
```
这里直接用 `..` 操作符拼接 `msg1`。如果传入的 `msg1` 是 `nil`,拼接就会报错。
在 `斩妖印 [60510]` 这个buff里,你调用它的方式是:
```lua
local msg1 = sendmsg(actor, 1, '{"Msg":"触发{[斩妖印]|253:0:1} : 使怪物 {血量-'.. damage ..'点|251:0:1}","FColor":255,"BColor":219,"Type":1}')
ATTACK_func.buff_msg(actor, "", msg1, "")
```
问题来了!`sendmsg` 这个函数是执行发送消息的命令,它**没有返回值**(或者说返回的是 `nil`)。所以你把 `sendmsg(...)` 的结果赋值给 `msg1`,`msg1` 就变成了 `nil`。
然后你把 `nil` 传给了 `buff_msg` 函数,在拼接字符串时就报错了。
**修正方法:**
你需要把要发送的消息内容字符串,直接传给 `buff_msg` 函数,而不是把 `sendmsg` 的(空)返回值传过去。
修改 `斩妖印 [60510]` 的代码如下:
```lua
-- 斩妖印 烈火命中怪物时附加10%的伤害结果。
[60510] = function(actor, target, hiter, skillid, damage, Model, value)
if not hasbuff(actor,60510) then return end
if skillid ~= 26 then return end -- 26是烈火剑法技能ID
if not ismon(target) then return end
damage = math.floor(damage * 1.1)
-- 这里构造消息字符串,但不发送
local msg1 = '触发{[斩妖印]|253:0:1} : 使怪物 {血量-'.. damage ..'点|251:0:1}'
-- 将字符串传给 buff_msg 函数,由它内部判断并发送
ATTACK_func.buff_msg(actor, "", msg1, "")
return damage -- 返回修正后的伤害值
end,
```
这样修改后,`msg1` 就是一个真正的字符串了,传入 `buff_msg` 函数后就能正常拼接和发送。
另外,你代码里 `buff_msg` 函数中给目标 (`targe`) 发送消息时,也用了 `sendmsg`,这个逻辑是对的,因为你是先构造好消息字符串 `msg`,然后再调用 `sendmsg` 发送。
记住啦,小仙,`sendmsg`、`giveitem` 这类执行操作的引擎函数,通常都是直接生效,没有返回值的(或者返回是否成功,但通常我们不用它的返回值)。需要传递数据时,应该传递数据本身(比如字符串、数字),而不是传递一个命令的调用结果。
下次写代码要细心点哦,不懂的可以随时问我,或者请教浮生梦尊师!
← 返回问答库