| [传奇技术]传奇Lua使用说明 NPC M2现已支持多种模式:纯Lua脚本Npc、TXT脚本与Lua混编
 纯LuaNPC启用方法如下:
 删除原本的txt脚本,以ExternLua\Npcs\作为根目录(默认,可修改配置),以前在Market_Def怎么建文件夹、取文件名就还怎么弄,不过这次后缀换成.lua
 用编辑器打开lua脚本,下面的示例进行编写即可
 
 复制代码--[[
NPC脚本说明:
使用局部变量定义表并返回
并且需要存在main函数,注意大小写,写错无法正确被M2识别并执行
local npc = {
    _click = function(self, args)
        self:_main(args)
    end,
    _main = function(self, args)
        local npc = TMerchant(args.pNpc)
        npc:Say('这是一段来自Lua脚本的对话!\\<跳转到另一个函数/@另一个触发>', true, args.pPlayer, args.sLabel)
    end,
    _另一个触发 = function(self, args)
        local npc = TMerchant(args.pNpc)
        npc:Say('这是另一条消息了,函数名是支持中文的,但Lua函数名不支持@符,所以函数名的@要换为_\\<我懂了/@back>', false, args.pPlayer, args.sLabel)
    end,
}
return npc
]]
local npc = {
    _click = function(self, args)
        local player = TPlayObject(args.pPlayer)
        self:_main(args)
    end,
    _main = function(self, args)
        local npc = TMerchant(args.pNpc)
        npc:Say('很好办的啦\\<搞起/@另一个触发>', true, args.pPlayer, args.sLabel)
    end,
    _另一个触发 = function(self, args)
        local npc = TMerchant(args.pNpc)
        npc:Say('或许吧\\<返回/@back>', false, args.pPlayer, args.sLabel)
    end,
}
return npc
TXT老NPC与Lua脚本混编:请参考下面的例子:
 Market_Def\比奇城\测试NPC2-0.txt
 
 [@main]
 #SAY
 混合写也可以的呢\ \<是的呢/@混合触发>
 [@混合触发]#ACT
 LUA_NPC_CALL
 [@给他整个活]#ACT
 SendMsg 5 草!走!忽略!
 
 ExternLua\npcs\测试NPC2-0.lua
 复制代码local npc = {
    _混合触发 = function(self, args)
        --
        local npc = TNormNpc(args.pNpc)
        local player = args.pPlayer
        local sLabel = args.sLabel
        npc:Say('没错呢\\ \\<返回/@back>', true, player, sLabel)
        npc:GotoLabel(player, '@给他整个活', false, '')
    end,
}
return npc
注意:TXT脚本NPC缺失的触发自动检测相应的Lua脚本 
 |