【脚本】lua虚拟机缓存变量,不跟引擎交互适合高频使用
就是把变量表缓存到lua虚拟机里面,原来读写一次4微秒,缓存之后1微秒甚至更低主要是在高频场景中可以不跟引擎进行交互,
我的封装放到附件了,脚本很简单,主要是思路。
-- 原理说明:
-- 正常情况下使用 setVar 和getVar 不加最后一个参数。
-- 就和官方接口 getplaydef(play, varName) setplaydef(play, varName, value) 是一个性质。变量名需要使用官方的S N U T 开头的。
-- 只是在存入的时候会多存入一份到缓存表里面。
-- 读的时候优先从缓存表里面读,如果缓存表里面没有就会去引擎里面查找变量并且更新缓存表,这样就不用担心在加载了QF表清空没有值。
-- 如果加最后一个参数,比如getVar(play,"哈哈",true) 就是直接以键值对的形式写到lua表里面,变量名可以随便,完全不跟引擎交互,建议做一些高频触发临时计算的场景使用。
-- 正常情况下使用官方的变量不加最后一个参数就可以了,可以优化读取的性能。
-- 正常情况下使用 setVar 和getVar 不加最后一个参数。
-- 就和官方接口 getplaydef(play, varName) setplaydef(play, varName, value) 是一个性质。变量名需要使用官方的S N U T 开头的。
-- 只是在存入的时候会多存入一份到缓存表里面。
-- 读的时候优先从缓存表里面读,如果缓存表里面没有就会去引擎里面查找变量并且更新缓存表,这样就不用担心在加载了QF表清空没有值。
-- 如果加最后一个参数,比如getVar(play,"哈哈",true) 就是直接以键值对的形式写到lua表里面,变量名可以随便,完全不跟引擎交互,建议做一些高频触发临时计算的场景使用。
-- 正常情况下使用官方的变量不加最后一个参数就可以了,可以优化读取的性能。
-- Lua虚拟机缓存变量
local cachedVar = _G.cachedVar or {}
_G.cachedVar = cachedVar
local function initializePlayerCache(play)
if not cachedVar[play] then
cachedVar[play] = {}
end
return cachedVar[play]
end
function getVar(play, varName, spare)
local cachedData = initializePlayerCache(play)
local value = cachedData[varName]
if spare then
return value or 0
else
if not value then
value = getplaydef(play, varName)
cachedData[varName] = value
end
return value
end
end
function setVar(play, varName, value, spare)
local cachedData = initializePlayerCache(play)
cachedData[varName] = value
if not spare then
setplaydef(play, varName, value)
end
end
-- 全局变量
function getSysVar(varName, spare)
local value = cachedVar[varName]
if spare then
return value or 0
else
if not value then
value = getsysvar(varName)
cachedVar[varName] = value
end
return value
end
end
function setSysVar(varName, value, spare)
cachedVar[varName] = value
if not spare then
setsysvar(varName, value)
end
end
--注意登陆大小退时候要赋值一下
function login(play)
_G.cachedVar[play] = {}
end
--人物小退触发
function playreconnection(play)
_G.cachedVar[play] = nil
end
--人物大退触发
function playoffline(play)
_G.cachedVar[play] = nil
end
为了大家能更好的学习996传奇引擎的技术,本站分享的部分内容来源于网络,无任何商业行为,如有侵权请立即告知!
THE END