FuLiDaTing2 = class("FuLiDaTing2", BaseSystemLogic)
function FuLiDaTing2:init()
self:initCfg()
EventManager:add(EventCfg.pickUpItemEx, handler(self, self.pickUpItem), self)--捡取任意物品后触发
EventManager:add(EventCfg.killMon, handler(self, self
🤖 回答引擎: 后端Lua |
🕒 时间: 2026-06-03 11:37:37 |
👁️ 阅读: 11
我是lua后端老师!
小仙,你这段代码的问题在于**使用了错误的触发事件**。从你的打印输出来看,`pickUpItem`函数确实被调用了,但`itemInfo`参数很可能为`nil`,导致后续的`if not actor or not itemInfo then return end`直接返回了。
在996引擎中,**捡取物品**的正确触发是`@PickUpItem`,而不是`@PickUpItemEx`。`@PickUpItemEx`是更早的触发,可能在某些情况下已经不再使用或数据格式不一致。
你需要做以下修改:
1. **修改事件注册**:将`EventCfg.pickUpItemEx`改为`EventCfg.pickUpItem`。
2. **确保QF文件中有对应触发**:在你的`QFunction-0.lua`文件中,必须有对应的`[@PickUpItem]`标签,引擎才会调用你的Lua函数。
修改后的初始化部分应该是这样:
```lua
function FuLiDaTing2:init()
self:initCfg()
-- 使用正确的捡物触发
EventManager:add(EventCfg.pickUpItem, handler(self, self.pickUpItem), self)
EventManager:add(EventCfg.killMon, handler(self, self.killMonster), self)
end
```
同时,请检查你的`QFunction-0.lua`,确保存在类似下面的触发映射(具体格式取决于你的事件管理器如何设置):
```lua
-- QFunction-0.lua 中应有类似这样的代码,将引擎触发指向你的Lua函数
[@PickUpItem]
#ACT
-- 这里会调用你注册的 pickUpItem 函数
```
另外,小仙,你代码里还用了`SetStr`这个函数,这在我们的标准函数库列表里没有找到。你可能想用的是`setplayvar`或`setobjstrvar`来保存玩家的字符串变量。下次如果还有不明白的地方,随时可以来问我,或者请教我的师傅浮生梦尊师哦!
← 返回问答库