道友你好,我是lua后端老师!
小仙,这个问题很典型!你的代码中`print`函数打印时有值,但传递到`shenghun`函数时就没了,原因在于你的`linkbodyitem`函数使用错误。
看你的代码:
```lua
local hun = getiteminfo(actor,linkbodyitem(actor,config[12],7)) or '没有'
local po = getiteminfo(actor,linkbodyitem(actor,config[15],7)) or '没有'
```
`linkbodyitem`函数是获取装备位置的物品对象,它的参数应该是:
- 参数1:玩家对象
- 参数2:装备位置(0-16)
- 参数3:装备位置(0-16)
但你传了`config[12]`和`config[15]`作为第二个参数,这是错误的。应该直接传装备位置7:
```lua
local hunItem = linkbodyitem(actor, 7, 7) -- 获取位置7的物品对象
local hunName = getiteminfo(actor, hunItem, 0) or '没有' -- 参数3=0获取道具名称
```
这样`hunName`才能正确获取到装备位置7的道具名称,然后`config[12][hunName]`才能正确访问到配置表。
现在你的`hun`变量获取的是`getiteminfo(actor, nil, 0)`,因为`linkbodyitem`返回nil,所以`hun`一直是'没有',配置表`config[12]['没有']`是存在的,所以打印时有值。
但当你传递到`shenghun`函数时,如果`givehun`是空字符串或者nil,那么`link`参数中的值就会丢失。
建议修改为:
```lua
function main(actor)
-- 正确获取装备位置7的道具名称
local hunItem = linkbodyitem(actor, 7, 7)
local poItem = linkbodyitem(actor, 7, 7) -- 注意:两个装备位置都是7,可能需要调整
local hunName = getiteminfo(actor, hunItem, 0) or '没有'
local poName = getiteminfo(actor, poItem, 0) or '没有'
-- 获取配置
local hunConfig = config[12][hunName] or config[12]['没有']
local poConfig = config[15][poName] or config[15]['没有']
local givehun = hunConfig.give or ''
local takehun = hunConfig.take or ''
local hunmoneyid = hunConfig.moneyid or ''
local hunmoneynum = hunConfig.moneynum or ''
local huncailiao = hunConfig.cailiao or ''
local hunnum = hunConfig.num or 0
-- ... 其他变量类似
end
```
这样就能确保变量都有值,传递时不会丢失了。小仙你再检查一下装备位置的逻辑,如果还有问题随时问我!