VV引擎目前对Lua支持已趋于成熟,原生支持 Lua 脚本 + 传统 txt 脚本双模式,Lua 是其高级脚本核心,用于实现复杂玩法、
自定义 NPC、任务、副本、后台逻辑、前后端互通等,扩展性远强于传统脚本。
1.目录结构:
2.具体文件用途释义
QFunction-0.lua
QFunction.lua封装了QF中的各种触发LUA版本。
QFunction.lua在引擎启动以及热重载时会自动执行一次,
那么用户可在Qf中定义一些初始化函数或是全局常量以便后用
例如:for k, _ in pairs(package.loaded) do
if string.find(k, '^Envir/Lua/') then
package.loaded[k] = nil
end
end
function MainError(errinfo)
if errinfo then
print('脚本错误', errinfo)
end
end
local function init()
dofile('Envir/Lua/Main.lua')
require("Envir/Lua/初始化")
require("Envir/Lua/CfgVar")
end
local result, errinfo = pcall(init)
if not result then
print('脚本错误', errinfo)
end
这二十多行代码就实现了用户热重载自定义Lua目录脚本的作用,用户的脚本不再局限于market_def目录,
可放置到Envir下的Lua目录,并且这些代码不再局限main入口,可根据用户喜好随意定义!
下面我简单讲解一下原理
QFunction-0.lua中打开并运行Envir/Lua/Main.lua文件,利用lua的元方法定义了一个全局表Npclib,
表Npclib存放有Envir/lua/Npc目录下所有脚本文件,并且每次引擎在热重载脚本会将缓存中脚本文件下标清除,
再利用元方法重置全局表Npclib,以此实现了Envir/lua/Npc目录下所有脚本文件的热更新
参考代码:
local npcliby = {}
npcliby["anniu"] = dofile("Envir/Lua/Npc/anniu.lua")
Npclib = setmetatable(npcliby,{__index = function(Npclib,key)
local fun = dofile("Envir/lua/Npc/"..key..".lua")
if fun then
rawset(Npclib,key,fun)
return Npclib[key]
else
print("调用NPC函数失败id "..key..")")
return nil
end
end
})
核心作用:Npclib 是一个「自动加载 NPC 脚本」的工具表
当你使用 Npclib.xxx 时,它会自动去读取 Envir/lua/Npc/xxx.lua 文件,并把文件内容缓存起来,下次直接用,不用重复加载。
3.Envir用户脚本区
书写NPC形式的脚本,还是和普通脚本一致,在market_def或者questdiary文件夹内书写。加载方式还是配置merchant.txt进行应用。 唯一不同的地方就是脚本后缀不是TXT,而是LUA。 例如脚本名字为 传送员-0.txt , LUA脚本只需要改为传送员-0.lua放到同样的位置即可。 当同名txt脚本和同名.lua脚本同时存在时,优先读取lua脚本。如果没有找到同名的Lua脚本,则会继续读取同名.txt的传统脚本。 所以LUA是双脚本同时存在的。因此,如果感觉写LUA吃力,可以继续使用擅长的TXT写脚本。
此版本仅包含普通商人NPC、传送NPC及各城镇老兵,包括lua和对应的txt脚本,初学者可对应比照学习
部分游戏参考图:
下载地址:
VVM2引擎20260520最新Lua脚本基础服务端
VVM2引擎20260520最新txt脚本基础服务端
|