suwuji 发表于 2018-8-18 18:37:50

服务器set即将取消,mushclient替代方案

本帖最后由 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 = 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=value
        if cached~=true then
                saveset()
        end
end

function get(name,cached)
        if cached~=true then
                loadset()
        end
        if my_var_sets~=nil then
                return my_var_sets
        else
                return nil
        end
end使用方法,首先定义默认的player_name变量表示玩家姓名id,最后会生成默认名称.set文件存储变量
获取变量get(name)
设置变量set(name,value)
删除变量set(name)

限制:变量名称中不要含有=符号,value中可以含有=符号
默认情况下使用,默认自动存取文件内容速度上足够,如果有异常频繁存取的情况,请使用get(name,true),和set(name,value,true)的形式来抑制磁盘操作,例如在循环中操作上万次以上的时候。

xurufeng 发表于 2018-8-18 19:09:17

太高端了,看不懂yct63.

jhzg 发表于 2018-8-25 13:26:44

高手,学习学习
页: [1]
查看完整版本: 服务器set即将取消,mushclient替代方案