996引擎 - 活捉NPC

996引擎 - 活捉NPC

  • 引擎触发 - 引擎事件(QF)
  • 事件处理模块 GameEvent
  • 测试文件
  • 参考资料

引擎触发 - 引擎事件(QF)

cfg_game_data 配置 ShareNpc=1 可以将QM和机器人的触发事件全部转到 QF

引擎触发是通用的,TXT的所有触发转换成小写后在LUA中就可使用,如说明书中缺省可反馈至对接群

三端引擎的触发主体只会是系统/玩家对象; 如cfg_mongen表填入的触发回调,参数1是系统对象,参数2才是怪物对象

Envir\Market_Def\QFunction-0.lua 官方底板中已经添加了 点击npc触发

lua 复制代码
--NPC点击触发
function clicknpc(actor, npcid)
    local npcobj = getnpcbyindex(npcid)
    GameEvent.push(EventCfg.onClicknpc, actor, npcid, npcobj)
end

事件处理模块 GameEvent

上面的clicknpc方法中调用了 Envir\QuestDiary\util\GameEvent.lua 封装的 GameEvent.push

GameEvent 模块,它实现了一个事件系统,允许开发者注册、移除和触发事件。

  1. 事件注册:

    GameEvent.add(eventName, func, tag, priority):用于注册一个事件监听器。

  2. 事件移除:

    GameEvent.remove(func):根据回调函数移除一个事件监听器。

    GameEvent.removeByNameAndTag(eventName, tag):根据事件名称和标签移除一个事件监听器。

    GameEvent.removeByTag(tag):根据标签移除所有事件监听器。

    GameEvent.removeAll():移除所有事件监听器。

  3. 事件推送:

    GameEvent.push(eventName,...):用于触发一个事件,并将事件参数传递给所有注册的监听器。

测试文件

我们自己创建个 Envir\QuestDiary\game\J\Test.lua

注册一个点击NPC事件,然后在聊天窗口输出 npc的 id

lua 复制代码
-- 注册一个事件监听器,当角色点击NPC时触发
GameEvent.add(EventCfg.onClicknpc, function (actor, npcid, npcobj)
    sendmsg(actor, ConstCfg.notice.own, '{"Msg":"<font color=\'#ff0000\'>NPC:'.. npcid ..'</font>","Type":1}')
end, {})

打个断点
attach 方式调试服务器进程 M2Server.exe

在游戏中点击NPC,古之界传送使 就被我们找到了

参考资料

引擎触发

相关推荐
unix2linux5 小时前
YOLO v5 Series - Image & Video Storage ( Openresty + Lua)
yolo·lua·openresty
最后一个bug6 小时前
如何理解Lua 使用虚拟堆栈
linux·c语言·开发语言·嵌入式硬件·lua
半夏知半秋2 天前
lua-lru缓存算法解析
笔记·学习·算法·缓存·lua
最后一个bug2 天前
C语言执行Lua进行错误处理
linux·服务器·c语言·开发语言·嵌入式硬件·lua
袁庭新2 天前
Lua如何连接MySQL数据库?
redis·mysql·lua·lua5.4·袁庭新
红黑色的圣西罗2 天前
Lua 实现继承的一种方式
开发语言·lua
weixin_428498494 天前
Lua资料
开发语言·lua
Clown954 天前
go-zero(四) 错误处理(统一响应信息)
开发语言·golang·lua
半夏知半秋5 天前
lua实现雪花算法
开发语言·笔记·算法·lua
网络研究院5 天前
向潜在安全信息和事件管理 SIEM 提供商提出的六个问题
安全·工具·管理·siem·事件·观点·信息