具体函数名及描述如下:
序号 | 函数名 | 函数描述 |
1 | setOrderDataBykey(...) | 设置排行榜中指定键的数值 |
2 | removeOrderDataByKey(...) | 删除排行榜中指定键的数值 |
3 | getOrderDataByKeyEx(...) | 获取排行榜中指定键的数值 |
4 | getOrderDataIndexValueEx(...) | 获取排行榜中指定排名的数值 |
5 | ClearOrderData(...) | 清理排行榜 |
6 | automaticByKey(...) | 变量自运算 |
7 | getOrderDataIndexAreaEx(...) |
获取排行榜中多条数据 (一次最多100条数据) |
8 | getOrderDataValueAreaEx(...) |
获取排行榜中指定值区域的前多少名数据 (一次最多100条数据) |
9 | setDataListBykey(...) | 设置表中指定键的值 |
10 | removeDataListByKey(...) | 删除表中指定键的值 |
11 | getDataListByKeyEx(...) | 获取表中指定键的值 |
12 | ClearDataList(...) | 清空表数据 |
13 | getlistCache(...) | 获取表或排行榜当前缓存数据 |
14 | UpdateDataListByKey(...) |
安全更新数据 |
15 | SendSeverMsg(...) |
发送服务通知消息 |
16 | TransmitToMap(...) |
传送玩家到指定地图 |
17 | TransmitToRoom(...) |
传送玩家到指定房间 |
18 | TransmitOtherRoom(...) |
传送玩家其他房间 |
19 | GetRoomID(...) |
获取当前云服房间ID |
20 | TransmitToCategoryRoom(...) |
传送玩家到指定分类房间 |
21 | SetForbidJoin(...) |
当前房间停止进入玩家(仅云服生效) |
22 | CloseCurRoom(...) |
关闭当前房间(仅云服生效) |
23 | GetRoomCategory(...) | 获取当前房间的分类信息(仅云服生效) |
local libvarname = 'rank_1'
local ret = CloudSever:setOrderDataBykey(libvarname,"key1",1)
if ret == ErrorCode.OK then
print('设置排行榜值成功 k = key1 ,v = 1')
else
print('设置排行榜值失败')
end
local libvarname = 'rank_1'
local ret = CloudSever:removeOrderDataByKey(libvarname,"key1")
if ret == ErrorCode.OK then
print('删除排行榜数据成功')
else
print("删除排行榜数据失败")
end
local callback = function (ret,k,v,ix) -- 返回结果不一定有排名
if ret == ErrorCode.OK then
if ix then
print('返回数据成功 键= '..k..' 值='..v..' 排名='..ix )
else
print('返回数据成功 键= '..k..' 值='..v)
end
else
if ret == 2 then --=不存在数据
print('数据不存在')
else
print('获取失败')
end
end
end
local libvarname = 'rank_1'
local ret = CloudSever:getOrderDataByKeyEx(libvarname,"key1",callback)
if ret == ErrorCode.OK then
print('请求排行榜数据成功')
else
print("请求排行榜数据失败")
end
local callback = function (ret,k,v,ix)
if ret == ErrorCode.OK then
print('返回数据成功 键= '..k..' 值='..v..' 排名='..ix )
else
if ret == 2 then --=不存在数据
print('数据不存在')
else
print('获取失败')
end
end
end
local libvarname = 'rank_1'---4
local ret = CloudSever:getOrderDataIndexValueEx(libvarname,1,callback) -- 请求第1名的数据
if ret == ErrorCode.OK then
print('请求排行榜数据成功')
else
print("请求排行榜数据失败")
end
local libvarname = 'rank_1'
local ret = CloudSever:ClearOrderData(libvarname) -- 清空排行榜
if ret == ErrorCode.OK then
print('清空排行榜值成功')
else
print('清空排行榜值失败')
end
local libvarname = 'rank_1'
local value = 10
local ret = CloudSever:automaticByKey(libvarname,"key1",value) -- 设置自运算值加10
if ret == ErrorCode.OK then
print('设置排行榜值成功 k = key1 ,v = 1')
else
print('设置排行榜值失败')
end
{
{
-- 玩家1迷你号,string类型
k = [[1000]],
-- 玩家1排行榜数值,number类型
v = 1
},
{
-- 玩家2迷你号,string类型
k = [[1001]],
-- 玩家2排行榜数值,number类型
v = 3
}
-- 更多玩家数据依次类推
}
-- 本地返回的数据格式示例
{
{
-- 玩家1迷你号,string类型
k = [[1000]],
-- 玩家1排行榜数值,number类型
v = 1,
-- 玩家1昵称,string类型
nick = [[迷你队长]]
},
{
-- 玩家2迷你号,string类型
k = [[1001]],
-- 玩家2排行榜数值,数值类型
v = 3,
-- 玩家2昵称,string类型
nick = [[迷你策划 Max]]
}
-- 更多玩家数据依次类推
}
-- 云服返回的数据格式示例
--百人排行榜展示例子
local libvarname = 'rank_1'--排行榜名称
local reqcount = 100 --榜单上线
local refreshdt = 10 --首次请求间隔
local updatetime = 0 --当前更新时间
local RankInfos = {}
local function func_runtime(param)
local curtime = os.time()
if curtime - updatetime > refreshdt then
updatetime = curtime
local tmfos = {}
local callback = function (ret,value) -- 返回结果不一定有排名
if ret == ErrorCode.OK and value then
refreshdt = 1200 --刷新时间修改
for ix, v in pairs(value) do
table.insert(tmfos,v)
end
if #tmfos == reqcount or #tmfos > #RankInfos then
RankInfos = tmfos
end
end
end
local ret = CloudSever:getOrderDataIndexAreaEx(libvarname,reqcount,callback)
if ret == ErrorCode.OK then
print('请求排行榜数据成功')
else
print("请求排行榜数据失败")
end
end
end
ScriptSupportEvent:registerEvent('Game.RunTime', func_runtime)
local RankUI = "7275576434651487802" -- 填入UIID
local RefishTxt =
{
-- {"名次",'昵称','分数'}的元件ID,
{"7275576434651487802_1",'7275576434651487802_2','7275576434651487802_3'},
}
local PageItemCount = #RefishTxt
local AllUserinfo = {}
local function RankRefish(uin)
if not AllUserinfo[uin] then AllUserinfo[uin] = 0 end
print(AllUserinfo[uin])
local istr = AllUserinfo[uin]*PageItemCount + 1
if istr > #RankInfos then return end
for i = 1, PageItemCount, 1 do
if RefishTxt[i] then
if istr <= #RankInfos then
Customui:setText(uin,RankUI,RefishTxt[i][1],tostring(istr))
Customui:setText(uin,RankUI,RefishTxt[i][2],tostring(RankInfos[istr].nick or RankInfos[istr].k))
Customui:setText(uin,RankUI,RefishTxt[i][3],tostring(RankInfos[istr].v))
istr = istr + 1
else
Customui:setText(uin,RankUI,RefishTxt[i][1],"")
Customui:setText(uin,RankUI,RefishTxt[i][2],"")
Customui:setText(uin,RankUI,RefishTxt[i][3],"")
end
end
end
end
local function func_openui(e)
if #RankInfos > 0 and e.CustomUI == RankUI then
local uin = e.eventobjid
AllUserinfo[uin] = 0
RankRefish(uin)
end
end
ScriptSupportEvent:registerEvent('UI.Show', func_openui)
--[[
--翻页功能
local pageupele = "7275576434651487802_7" -- 填入向上翻页按钮节点
local pagedownele = "7275576434651487802_8"-- 填入向下翻页按钮节点
local function func_page(e)
local uin = e.eventobjid
if uin and e.btnelenemt then
if e.btnelenemt == pageupele then
if not AllUserinfo[uin] then AllUserinfo[uin] = 0 end
AllUserinfo[uin] = AllUserinfo[uin] + 1
if AllUserinfo[uin] > math.ceil(#RankInfos / PageItemCount ) then AllUserinfo[uin] = math.ceil(#RankInfos / PageItemCount) return end
RankRefish(uin)
elseif e.btnelenemt == pagedownele then
if not AllUserinfo[uin] then AllUserinfo[uin] = 0 end
AllUserinfo[uin] = AllUserinfo[uin] - 1
if AllUserinfo[uin] < 0 then AllUserinfo[uin] = 0 return end
RankRefish(uin)
end
end
end
ScriptSupportEvent:registerEvent('UI.Button.Click', func_page)
]]--
local callback = function (ret,value)
if ret == ErrorCode.OK and value then
for ix, v in pairs(value) do
local txt = '第'.. ix..'名'..'键 = ' ..v.k..'值 = '..v.v
print(txt)
end
end
end
local libvarname = 'rank_1'
local ret = CloudSever:getOrderDataValueAreaEx(libvarname,-2,50,200,callback) -- 请求值是50 - 200的从大到小排序的前2名的数据
if ret == ErrorCode.OK then
print('请求排行榜数据成功')
else
print("请求排行榜数据失败")
end
local libvarname = 'list_1'
local ret = CloudSever:setDataListBykey(libvarname,"key1.score",1)
if ret == ErrorCode.OK then
print('设置排行榜值成功 k = key1 ,v = 1')
else
print('设置排行榜值失败')
end
local libvarname = 'list_1'
local ret = CloudSever:removeDataListByKey(libvarname,"key1.score") --获取key1的分数
if ret == ErrorCode.OK then
print('请求删除排行榜数据成功')
else
print("请求删除排行榜数据失败")
end
local callback = function (ret,k,v)
if ret == ErrorCode.OK then
print('获取数据成功 键= '..k..' 值='..v)
else
if ret == 2 then --=不存在数据
print('数据不存在')
else
print('获取失败')
end
end
end
local libvarname = 'list_1'
local ret = CloudSever:getDataListByKeyEx(libvarname,"key1.score",callback) --获取key1的分数
if ret == ErrorCode.OK then
print('请求排行榜数据成功')
else
print("请求排行榜数据失败")
end
local libvarname = 'list_1'
local ret = CloudSever:ClearDataList(libvarname)
if ret == ErrorCode.OK then
print('清空表成功')
else
print('清空表失败')
end
local libvarname = 'list_1'
local ret,values = CloudSever:getlistCache(libvarname)
if ret == ErrorCode.OK then
print('获取数据成功')
else
print('获取数据失败')
end
local callback = function (ret,key,value)
-- ret 0 很遗憾,数据冲突了,
-- 需要根据带回来的最新value进行逻辑处理后返回给底层重试
if ret == 0 then
print("有冲突,这是数据库里最新的值" , value)
--逻辑处理
value = value + 1
--返回给底层重试
return value
-- ret 2 修改成功啦
elseif ret == 2 then
print("成功,更新后的值 " , value)
end
end
local ret = CloudSever:UpdateDataListByKey('list','score',callback)
if ret == ErrorCode.OK then
end
--派发自定义事件
local function func_event(param)
local data = {id = 123,ops = "aaa"} --自定义事件带入的参数
local ok, json = pcall(JSON.encode, JSON, data) --转换成json格式
CloudSever:SendSeverMsg("customevent",{customdata = json}) -- 发送云服消息广播
end
ScriptSupportEvent:registerEvent('Player.PlayAction', func_event)
--云服消息广播监听
local function func_event(param)
print(param) --打印自定义事件参数
end
ScriptSupportEvent:registerEvent('customevent', func_event)
local ret = CloudSever:TransmitToMap(playerid, mapid)
if ret == ErrorCode.OK then
print('执行成功' )
else
print('执行失败')
end
local ret = CloudSever:TransmitToRoom(playerid, roomid)
if ret == ErrorCode.OK then
print('执行成功' )
else
print('执行失败')
end
local ret = CloudSever:TransmitOtherRoom(playerid)
if ret == ErrorCode.OK then
print('执行成功' )
else
print('执行失败')
end
local ret ,roomid = CloudSever:GetRoomID()
if ret == ErrorCode.OK then
print('执行成功' ,roomid )
else
print('执行失败')
end
local ret = CloudSever:TransmitToCategoryRoom(playerid, roomtype, mapid)
if ret == ErrorCode.OK then
print('执行成功' )
else
print('执行失败')
end
local code = CloudSever:SetForbidJoin(seconds)
if code == ErrorCode.OK then
print('执行成功' )
else
print('执行失败')
end
local code = CloudSever:CloseCurRoom(countdown, msg)
if code == ErrorCode.OK then
print('执行成功' )
else
print('执行失败')
end
local code ,msg = CloudSever:GetRoomCategory()
if code == ErrorCode.OK then
print('执行成功' ,msg )
else
print('执行失败')
end