|
本帖最后由 suwuji 于 2018-8-18 10:41 AM 编辑
我是没做过走路还要一步一set的机器人的。服务器上自定义set主要是应对掉线,重入等一些特殊情况做的长久保存。wiz说set消耗资源即将取消。那么我们直接把set缓存内容放到自己的电脑上为好。实际上mushclient有自定义变量保存机制,不过需要保存world文件,并不方便,我们可以自定义文件存储这些信息,那么即使mushclient崩溃重启,基本上也能够还原数据。
代码很少- my_var_sets = {}
- function Default_PlayerName()
- if player_name == nil then
- player_name = GetVariable('player_name')
- if player_name == nil then
- print("请设置player_name变量")
- end
- end
- return player_name
- end
- function loadset(playerName)
- if playerName == nil then
- playerName = Default_PlayerName()
- end
- for line in io.lines(playerName..".set") do
- for k,v in string.gmatch(line,"([^=]+)=(.+)") do
- my_var_sets[k] = v
- end
- end
- end
- function saveset(playerName)
- if playerName == nil then
- playerName = Default_PlayerName()
- end
- local file = io.open(playerName..".set","w+")
- if file~=nil then
- for k,v in pairs(my_var_sets) do
- file:write(k.."="..v.."\n")
- end
- file:close()
- end
- end
- function set(name,value,cached)
- my_var_sets[name]=value
- if cached~=true then
- saveset()
- end
- end
- function get(name,cached)
- if cached~=true then
- loadset()
- end
- if my_var_sets[name]~=nil then
- return my_var_sets[name]
- else
- return nil
- end
- end
复制代码 使用方法,首先定义默认的player_name变量表示玩家姓名id,最后会生成默认名称.set文件存储变量
获取变量get(name)
设置变量set(name,value)
删除变量set(name)
限制:变量名称中不要含有=符号,value中可以含有=符号
默认情况下使用,默认自动存取文件内容速度上足够,如果有异常频繁存取的情况,请使用get(name,true),和set(name,value,true)的形式来抑制磁盘操作,例如在循环中操作上万次以上的时候。 |
|