迷你世界私人变量上传游戏服务器表

 废话不多说上传对应脚本

local tbl={[3]={'仙力','生命上限','攻击力','防御力','移动速度','生命偷取率','等级','轮回次数',},
          [4]={'境界名称',},
          }
--玩家私有变量组[是组]
local tbls={[17]={'攻击力'},           
           }

--此脚本仅用于上传更新表排行榜数据,
--星空露珠工作室制作
--玩家私有变量
 local tbl={[3]={'玩家登录次数','玩家累计时长','玩家累计步数','玩家死亡次数','玩家累计领地'},
            [4]={'称号',},
           }
 local tbls={[17]={'数组测试',},
            }         

--[[玩家私有变量[不是组]
local tbl={[3]={'仙力','生命上限','攻击力','防御力','移动速度','生命偷取率','等级','轮回次数',},
          [4]={'境界名称',},
          }
--玩家私有变量组[是组]
local tbls={[17]={'攻击力'},           
           }        
 --]]        
local libvarname1 = 'rank_10'--排行榜名称索引
local libvarname2 = 'datalist_1'--表索引
local rankname='玩家累计领地'  --排行榜私有变量名字
local ranktype=3  --排行榜是数值
--设置私有变量函数
  local function setvarLib(objid,actionattr,msg,num)   
    VarLib2:setPlayerVarByName(objid,actionattr,msg,num)
  end  
--获取私有变量函数并返回,数值或者字符串
 local function getvarLib(objid,actionattr,msg)    
    local result,value = VarLib2:getPlayerVarByName(objid,actionattr,msg)
  return value
 end
--获取私有变量组函数并返回,数值组或者字符串组
local function getallgroup(objid,actionattr,msg)    
  local result,ret=Valuegroup:getAllGroupItem(actionattr, msg, objid)
  return ret
 end

--转换数值单位  返回得到一个字符串带单位
 local function chak(num)
  --万亿兆京垓秭穰沟涧正载极
  local txt={'(万)','(亿)','(兆)','(京)','(垓)','(秭)','(穰)','(沟)','(涧)','(正)','(载)','(极)',}
 if num/10^4<1 then return num
  elseif num/10^(13*4)>1 then return (math.floor(num/10^(12*4-2))/10^2)..txt[12]
 end
 for i, v in pairs(txt) do 
 if num/10^(i*4)>=1 and num/10^((i+1)*4)<1 then return (math.floor(num/10^(4*i-2))/10^2)..v  end
 end
 end

--上传排行榜
 local function setorderdata(key,val)  
  local ret = CloudSever:setOrderDataBykey(libvarname1,key,val)
 end
--获取排行榜
local function getorderdata(key)  
  local callback = function (ret,k,v,ix) -- 返回结果不一定有排名
    if ret == ErrorCode.OK then
       if getvarLib(key,ranktype,rankname) >= k then          
          setorderdata(key,getvarLib(key,ranktype,rankname)) 
       end
    else        
        setorderdata(key,getvarLib(key,ranktype,rankname))
    end
  end
 local ret = CloudSever:getOrderDataByKeyEx(libvarname1,key,callback)
end

--玩家进入游戏
  local function enter(param)    
     local p=param.eventobjid    
     getorderdata(p) 
     local msg='玩家登录次数'      
        setvarLib(p,ranktype,msg,getvarLib(p,ranktype,msg)+1)         
        while true do         local msg='玩家累计时长'
         setvarLib(p,ranktype,msg,getvarLib(p,ranktype,msg)+10)
         threadpool:wait(10)
        end                  
   end
ScriptSupportEvent:registerEvent_NoError('Game.AnyPlayer.EnterGame', enter)


local function move(param)
  local p=param.eventobjid        
     local msg='玩家累计步数'
     setvarLib(p,ranktype,msg,getvarLib(p,ranktype,msg)+1)
end
ScriptSupportEvent:registerEvent_NoError('Player.MoveOneBlockSize', move)
local function click(param)
local p=param.eventobjid        
     local msg='玩家累计领地'
     setvarLib(p,ranktype,msg,getvarLib(p,ranktype,msg)+math.random(100,10000))       
end

ScriptSupportEvent:registerEvent_NoError('Player.ClickBlock', click)

--上传玩家表 更新数据上传60秒更新
 local function setdataList(key)   
    local result,name=Player:getNickname(key)
     local code, modleName = Actor:getActorFacade(key)          
    local data={}     
     data.name=name
     data.id=key    
     data.modleName=modleName        
     for k,v in pairs(tbl) do
       for _,v0 in pairs(v) do
        data[v0]=getvarLib(key,k,v0) 
       end     
     end
   for k,v in pairs(tbls) do
       for _,v0 in pairs(v) do
        data[v0]=getallgroup(key,k,v0) 
       end     
   end
  print('上传',data)
  CloudSever:setDataListBykey(libvarname2,key,data)
 end
local players={}
local function getpaly()
  --获取当前存档全部玩家列表
  --参数:-1全部玩家 0阵亡玩家 1存活玩家
 local result,num,array=World:getAllPlayers(-1) 
  for k,v in pairs(array) do
  --设玩家排行榜数值
   setorderdata(v,getvarLib(v,ranktype,rankname))
   --上传玩家表数值
   setdataList(v)
  end
 end

 local function func_runtime(param)
--  print(param)
   local  tick=param.ticks
  --上传房间内玩家数据60秒到刷新排行榜
  if tick%600==40 then 
    getpaly()
  end     
  end
ScriptSupportEvent:registerEvent('Game.RunTime', func_runtime)

以下是变量对应的数值,查看

--[[
VARTYPE.POSITION    1    位置
VARTYPE.AREAINS    2    区域
VARTYPE.NUMBER    3    数值
VARTYPE.STRING    4    字符串
VARTYPE.BOOLEAN    5    布尔值
VARTYPE.PLAYER    6    玩家
VARTYPE.PLAYERGROUP    7    玩家组
VARTYPE.BLOCKTYPE    8    方块类型
VARTYPE.ITEMTYPE    9    道具类型
VARTYPE.CREATURE    10    生物
VARTYPE.ACTORID    11    生物类型
VARTYPE.CREATUREGROUP    12    生物组
VARTYPE.TIMER    13    定时器
VARTYPE.EFFECTTYPE    14    特效类型
VARTYPE.SITEGROUP    15    位置组
VARTYPE.AREAGROUP    16    区域组
VARTYPE.NUMBERGROUP    17    数值组
VARTYPE.STRINGGROUP    18    字符串组
VARTYPE.BOOLEANGROUP    19    布尔值组
VARTYPE.BLOCKTYPEGROUP    20    方块类型组
VARTYPE.ITEMTYPEGROUP    21    道具类型组
VARTYPE.CREATURETYPEGROUP    22    生物类型组
VARTYPE.TIMERGROUP    23    计时器组
VARTYPE.EFFECTTYPEGROUP    24    特效类型组
]]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值