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

参考资料

引擎触发

相关推荐
闪电悠米19 小时前
黑马点评-Redis 消息队列-04_stream_seckill_order
数据库·redis·分布式·缓存·oracle·junit·lua
呦呦鹿鸣Rzh19 小时前
Redis Lua 脚本:从入门到避坑指南
redis·junit·lua
清晨00120 小时前
工业互联网实时数据统计一致性保障 — 基于 Redis Lua 的并发安全方案
redis·安全·lua
x***r1512 天前
Postman-win64-7.3.5-Setup安装配置教程(Windows 详细版)
开发语言·lua
我登哥MVP2 天前
Spring Boot 从“会用”到“精通”:内容协商原理
java·spring boot·后端·spring·java-ee·maven·lua
FFZero14 天前
[mpv脚本系统] (四) 脚本加载与事件循环系统
c语言·音视频·lua·多媒体
多彩电脑4 天前
Lua中的元表里的__index和__newindex
开发语言·lua
zfoo-framework5 天前
通过redis-cli+lua脚本查询redis数据
数据库·redis·lua
kiss strong5 天前
自制请求工具
开发语言·python·lua
闪电悠米5 天前
黑马点评-秒杀优化-04_lua_and_db_fallback
服务器·开发语言·网络·数据库·缓存·junit·lua