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,古之界传送使 就被我们找到了

参考资料

引擎触发

相关推荐
列星随旋8 小时前
基于 Redis + Lua,实现“多维度原子限流”(令牌桶 + 滑动窗口)
java·redis·lua
上海合宙LuatOS8 小时前
LuatOS扩展库API——【exgnss】GNSS定位
物联网·lua·luatos
0xDevNull9 小时前
Redis Lua 脚本详细教程
redis·缓存·lua
上海合宙LuatOS10 小时前
LuatOS扩展库API——【exlcd】显示屏控制
物联网·lua·luatos
0xDevNull10 小时前
Spring Boot 中使用 Redis Lua 脚本详细教程
spring boot·redis·lua
冉佳驹1 天前
Qt【第六篇】 ——— 事件处理、多线程、网络与文件等操作详解
qt·http·udp·tcp·事件·多线程与互斥锁
DJ斯特拉2 天前
Redis使用lua脚本
junit·单元测试·lua
Aktx20FNz2 天前
OpenClaw中级到高级教程
lua
LcGero2 天前
Lua + Cocos Creator 实战:用 Lua 驱动 UI 与游戏逻辑
游戏·ui·lua
静心观复4 天前
Lua 脚本是什么
开发语言·lua