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

参考资料

引擎触发

相关推荐
脸大是真的好~14 小时前
分布式锁-基于redis实现分布式锁(不推荐)- 改进利用LUA脚本(不推荐)前面都是原理 - Redisson分布式锁
redis·分布式·lua
ChaITSimpleLove2 天前
基于 .NET Garnet 1.0.91 实现高性能分布式锁(使用 Lua 脚本)
分布式·.net·lua
羑悻的小杀马特2 天前
Lua vs C++:核心设计哲学差异——从“系统基石”到“灵活工具”的思维碰撞
c++·lua
小毅&Nora2 天前
【后端】【工具】Redis Lua脚本漏洞深度解析:从CVE-2022-0543到Redis 7.x的全面防御指南
redis·安全·lua
古城小栈2 天前
接口测试:Postman+Newman 自动化脚本实战指南
自动化·lua·postman
小坏讲微服务2 天前
Spring Boot4.0 集成 Redis 实现看门狗 Lua 脚本分布式锁完整使用
java·spring boot·redis·分布式·后端·lua
IMPYLH3 天前
Lua 的 IO (输入/输出)模块
开发语言·笔记·后端·lua
菠萝地亚狂想曲3 天前
使用C语言操作LUA栈
c语言·junit·lua
IMPYLH4 天前
Lua 的 Debug(调试) 模块
开发语言·笔记·python·单元测试·lua·fastapi
明明明h4 天前
Lua中 . 和 : 的区别
lua