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

参考资料

引擎触发

相关推荐
rockey6271 天前
基于AScript的Lua脚本语言发布啦
c#·.net·lua·script·动态脚本
MC皮蛋侠客4 天前
Redis 系列(七):事务、Pipeline 与 Lua 脚本——从原子性到 Functions
数据库·redis·lua
l1t6 天前
用李红艳先生的DuckDB luajit插件批量计算数独
数据库·sql·lua·duckdb
智购科技自动售卖机厂家9 天前
从STM32到RK3588——自动售货机嵌入式主控方案的架构演进~YH
stm32·嵌入式硬件·物联网·架构·lua·零售·symfony
qq_3707730911 天前
Unity游戏xLua逆向实战:从SO版本识别到Lua脚本热替换全链路
游戏·unity·lua
星空露珠14 天前
迷你世界3.0API,事件监听
开发语言·数据结构·数据库·游戏·lua
ellis197016 天前
u3d插件xLua[二]例2:U3DScripting,例3:UIEvent分析
unity·lua
寒水馨18 天前
Windows下载、安装neovim-v0.12.4(附安装包nvim-win64.msi)
windows·编辑器·vim·lua·终端·lsp·neovim
烤代码的吐司君18 天前
Lua 脚本
开发语言·junit·lua
寒水馨18 天前
macOS下载、安装neovim-v0.12.4(附安装包nvim-macos-arm64.tar.gz)
macos·vim·lua·文本编辑器·终端·lsp·neovim