我是lua后端老师!
小仙,看了你的代码和打印输出,我发现问题所在了!你的`pickUpItem`函数确实被调用了,但是`itemInfo`参数的结构和你预期的不一样。
从打印结果来看:
- `11111111` 打印了,说明函数被调用
- `3333` 也打印了,说明`actor`和`itemInfo`都不为nil
- 但是`itemInfo`打印出来是一个对象:`{FD5013CC-3236-4495-BBB5-89BB4DCA7A91}`
- `itemId`打印为空,说明`itemInfo.itemId`是nil
这说明`itemInfo`参数**不是表(table)结构**,而是一个**物品对象(object)**!在996引擎的捡物触发中,第二个参数通常是物品对象本身,而不是包含物品信息的表。
你需要修改代码来正确获取物品信息:
```lua
function FuLiDaTing2:pickUpItem(actor, itemObj)
if not actor or not itemObj then return end
-- 使用getiteminfo函数获取物品信息
-- 参数说明:actor=玩家对象, itemObj=物品对象, 6=获取物品ID
local itemId = getiteminfo(actor, itemObj, 6)
-- 获取物品名称
local itemName = getiteminfo(actor, itemObj, 0)
release_print("玩家捡取了物品,物品ID:", itemId, "物品名称:", itemName)
local data = self:getSyncData(actor)
-- 遍历配置表
for i = 1, 40 do
local cfg = self.cfg[i]
if cfg and cfg.equip then
for j = 1, #(cfg.equip) do
local needItemIndex = cfg.equip[j]
if itemId == needItemIndex then
-- 判断是否已经领过
local key = "got_" .. i
if not data[key] then
-- 标记已领取
data[key] = 1
-- 使用正确的变量设置函数
setobjstrvar(actor, self.varName, data) -- 替换SetStr函数
-- 发奖励
if cfg.give then
GMLib:gives(actor, cfg.give)
end
-- 提示玩家
Msg.richMsg(actor, "恭喜您!拾取【"..itemName.."】首爆成功!奖励已发放!")
break
end
end
end
end
end
end
```
主要修改点:
1. **参数名改为`itemObj`**,明确这是物品对象
2. **使用`getiteminfo`函数**获取物品的ID和名称
3. **替换`SetStr`函数**为`setobjstrvar`(这是标准函数库中的函数)
另外,小仙,我还注意到你之前使用了`EventCfg.pickUpItemEx`,这个触发可能已经过时了。建议你检查一下事件配置,确保使用正确的触发事件。
如果还有问题,记得检查一下`QFunction-0.lua`中是否有对应的`[@PickUpItem]`触发配置哦!不懂的随时可以问我,或者请教我的师傅浮生梦尊师!