VVM2引擎20260520最新Lua + txt脚本基础服务端
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 = 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
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脚本基础服务端
头疼的500贡献还有就是 图像是32位还是64位的 好奇 lua看不懂啊
头疼的500贡献 这样能搞的就多了,需要学习的也多了 看帖回一个是礼貌也是好习惯,嘿嘿 新手菜鸟才学习一下:lol:lol:lol 大佬牛逼,感谢大佬无私分享! 前排前排, 大佬牛逼,感谢大佬无私分享!