--千人排行榜 
--星空露珠工作室制作
--功能1,翻页,2,千人榜,3,查看玩家信息
--赋值表
local tbl={[3]={'玩家登录次数','玩家累计时长','玩家累计步数','玩家死亡次数','玩家累计领地'},}
print('测试',table.concat(tbl[3],","))
local tbl={[3]={'仙力','生命上限','攻击力','防御力','移动速度','生命偷取率','等级','轮回次数',},
          [4]={'境界名称',},
          }
--玩家私有变量组[是组]
local tbls={[17]={'攻击力'},           
           }   
           

local libvarname1 = 'rank_10'--排行榜名称索引
local libvarname2 = 'datalist_123456'--表索引
local reqcount = 5000 --榜单上线
local RankInfos = {} --排行榜储存前5千人数据每分钟更新一次
local data={}
local data0={}
--获取玩家在表中的数据(不存在,赋值,存在,比较大小,重新赋值)
 local function getdataList(key) 
    local callback = function (ret,k,v)
      print(v.v)
       data0[tonumber(k)]=v,v  
    end 
  local ret = CloudSever:getDataListByKeyEx(libvarname2,key,callback) --获取key1的分数
 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
--举例 
print('56464676549=564.6亿)',chak(56464676549))
print('5646467567888865549=)',chak(5646467567888865549))

 local function func_runtime(param)
    local  tick=param.ticks
  --下载排行榜玩家数据60秒
    if tick%500==10 then       
      local callback = function (ret,value) -- 返回结果不一定有排名      
        if value then
         print('成功获取60秒排行榜条数据,并打印如下',#value) 
         print(value)             
          RankInfos=value
        end    
      end      
      CloudSever:getOrderDataIndexArea(libvarname1,-5000,callback) -- 从大到小排序的前1000名      
    elseif tick%500==20 then
    local ret,valuesdata = CloudSever:getlistCache(libvarname2)
        if ret == ErrorCode.OK then
        print('获取数据成功')    
        for k,v in pairs(valuesdata) do data[tonumber(v.k)]=v.v  end
        end    
    end
 end
--ScriptSupportEvent:registerEvent('Game.RunTime', func_runtime)
--7479770964540895138-22859_1
local RankUI  = "7479770964540895138-22859" -- 填入UIID
local uid ="7479770964540895138-22859_" --UI元件前缀
local pageupele = uid..135 -- 填入向上翻页按钮节点
local pagedownele = uid..136-- 填入向下翻页按钮节点
local pageup = uid..137 -- 填入首页按钮节点
local pagedown = uid..138-- 填入末尾页按钮节点
local pagenum = uid..134-- 显示当前页码txt
local open=uid..140    --打开按钮
local close=uid..139  --关闭按钮
local uitxthide=uid..141 --关闭查看玩家资料按钮
local uitxtshow=uid..142 --显示查看玩家资料

-- {"名次"13,【头像14备用】,'昵称'15,'迷你号'16,'分数'17,8,9.10.11}的元件ID,  
--(i*10+3), 【 (i*10+4)】,(i+1)*5+10,(i+1)*5+10,(i+1)*5+4
--固定显示自己页码  第11行 i=11
local RefishTxt =  10  --排名10行
local PageItemCount = RefishTxt
local AllUserinfo = {}  --储存玩家页码

--打印个人信息个人排行榜
 local function uiplayer(key) 
   local ret,values = CloudSever:getlistCache(libvarname1)
       print('获取个人排行榜,总数',#values)
       local callback = function (ret,k,v,ix) -- 返回结果不一定有排名
         print('获取个人排行榜信息',ret,k,v,ix)
                local result,name=Player:getNickname(key)
                local code, modleName = Actor:getActorFacade(key)          
                Customui:setText(key,RankUI,uid..11*10+3,(#values-ix+1))
                Customui:showElement(key,RankUI,uid..11*10+4)
                Customui:setTexture(key,RankUI,uid..11*10+4,modleName)     
                Customui:setText(key,RankUI,uid..11*10+5,name..'【我】')
                Customui:setText(key,RankUI,uid..11*10+6,key)
                Customui:setText(key,RankUI,uid..11*10+7,chak(v))
       end
  local ret = CloudSever:getOrderDataByKeyEx(libvarname1,key,callback)
 end
--打印临时玩家数据库
--临时富文本 7479770964540895138-22859_142
--临时赋值函数tbl转换字符串
 local function chakred(num,tbl)
   local str=' <br> '
   for k,v in pairs(tbl) do
      if type(v)=='table' then            
         str=str..k..':'..chakred(num+1,v)..' <br> '    --详细打印            
         --str=str..k..':'..table.concat(v,',')..' <br> '   
      elseif type(v)=='boolean' then
       print('boolean')
       if num==1 then
         str=str..k..':'..tostring(v)..' <br> '
         else str=str..'['..k..']:'..tostring(v)..','
        end
      else
        if k=='玩家累计领地' then
          str=str..k..':'..chak(tonumber(v))..' <br> '
        else
         if num==1 then
          str=str..k..':'..tostring(v)..' <br> '
         else str=str..'['..k..']:'..tostring(v)..','
         end
        end 
      end
   end
  return str..' <br> '    
 end

local function UIchak0(uin,play)
    local player=tonumber(play)
  local str='玩家资料库:'..tostring(player)..' <br> '
  if data[player]~=nil then 
    print('资料库chak')
    str=str..chakred(1,data[player])    
  else   
   getdataList(player)
    if data0[player]~=nil then
     str=str..chakred(1,data0[player])
    else       
     str=str..'未查到该玩家数据 <br>  请60秒后获取查看'
    end
  end
   print('查看数据',str)   
  Customui:showElement(uin,RankUI,uitxthide)   
  Customui:setText(uin,RankUI,uitxtshow,str)
end

--刷新翻页排行榜
local function RankRefish(uin) 
  Customui:setText(uin,RankUI,pagenum,'第'..tostring(AllUserinfo[uin]+1)..'页')
  uiplayer(uin)
    if not AllUserinfo[uin] then AllUserinfo[uin] = 0 end
    print('当前页码'..AllUserinfo[uin]+1) --当前页码
   Customui:setText(uin,RankUI,pagenum,'第'..tostring(AllUserinfo[uin]+1)..'页')
    local istr = AllUserinfo[uin]*PageItemCount + 1
    if istr > #RankInfos  then print(istr) end
    for i = 1, PageItemCount do 
          print('测试排行榜刷新进度'..i)  
              --getdataList(tonumber(RankInfos[istr].k))  
            if istr <= #RankInfos  then  
               Customui:showElement(uin,RankUI,uid..i+122)            
               if RankInfos[istr].k==uin or tonumber(RankInfos[istr].k)==uin  then
                Customui:setText(uin,RankUI,uid..i*10+3,istr)
                Customui:showElement(uin,RankUI,uid..i*10+4)
                Customui:setTexture(uin,RankUI,uid..i*10+4,data[tonumber(RankInfos[istr].k)].modleName)   
                Customui:setText(uin,RankUI,uid..i*10+5,RankInfos[istr].nick..'【我】')
                Customui:setText(uin,RankUI,uid..i*10+6,RankInfos[istr].k)
                Customui:setText(uin,RankUI,uid..i*10+7,chak(RankInfos[istr].v))
                istr = istr + 1
                 else 
                Customui:setText(uin,RankUI,uid..i*10+3,istr)
                Customui:showElement(uin,RankUI,uid..i*10+4)
                Customui:setTexture(uin,RankUI,uid..i*10+4,data[tonumber(RankInfos[istr].k)].modleName)
                Customui:setText(uin,RankUI,uid..i*10+5,RankInfos[istr].nick )
                Customui:setText(uin,RankUI,uid..i*10+6,RankInfos[istr].k)
                Customui:setText(uin,RankUI,uid..i*10+7,chak(RankInfos[istr].v))
                istr = istr + 1
               end                            
            else
                Customui:setText(uin,RankUI,uid..i*10+3,'')
                Customui:hideElement(uin,RankUI,uid..i*10+4)
                Customui:setText(uin,RankUI,uid..i*10+5,'')
                Customui:setText(uin,RankUI,uid..i*10+6,'')
                Customui:setText(uin,RankUI,uid..i*10+7,'')
                Customui:hideElement(uin,RankUI,uid..i+122)
            end       
    end
end

  local function func_openui(e)
    local uin = e.eventobjid
    if #RankInfos > 0 and e.CustomUI == RankUI then      
        AllUserinfo[uin] = 0  --初始化玩家当前页码数值
        RankRefish(uin)
        uiplayer(uin)
    end
  end

--翻页功能点击按钮 
-- 查看122相减 123-132.自己133
local chak0={[uid..123]=1,[uid..124]=2,[uid..125]=3,[uid..126]=4,[uid..127]=5,[uid..128]=6,[uid..129]=7,[uid..130]=8,[uid..131]=9,[uid..132]=10,[uid..133]=0,}

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)-1 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)                      
            --以下  1-11按钮重点
        elseif chak0[e.btnelenemt]~=nil then --查看资料
           --点击查看资料按钮1-10  自己是11
           if chak0[e.btnelenemt]~=0 then            
           local istr = AllUserinfo[uin]*PageItemCount+chak0[e.btnelenemt]                     
            UIchak0(uin,tonumber(RankInfos[istr].k))
           else
            UIchak0(uin,uin)
           end
         
        elseif e.btnelenemt==open then
           Customui:showElement(uin,RankUI,uid..2)                     
           Customui:hideElement(uin,RankUI,open)
          AllUserinfo[uin] = 0  --初始化玩家当前页码数值
          RankRefish(uin)
           --uiplayer(uin)
        elseif e.btnelenemt==close then
           Customui:hideElement(uin,RankUI,uid..2)                     
           Customui:showElement(uin,RankUI,open)
        elseif e.btnelenemt==uid..141 then                     
           Customui:hideElement(uin,RankUI,uid..141)       
        end
                 
    end
end

----玩家进入游戏打开UI界面    
  local function entershowui(param)
     local p=param.eventobjid   
      Player:openUIView(p,RankUI)
  end     
--玩家进入游戏打开UI界面    
  local function enter(param)
  threadpool:work(function()  entershowui(param) end)
  end
ScriptSupportEvent:registerEvent('UI.Button.Click', func_page)
ScriptSupportEvent:registerEvent('UI.Show', func_openui)
ScriptSupportEvent:registerEvent('Game.RunTime', func_runtime)
--ScriptSupportEvent:registerEvent('Game.Run', Game_Update)
ScriptSupportEvent:registerEvent_NoError('Game.AnyPlayer.EnterGame', enter)
--ScriptSupportEvent:registerEvent_NoError('Game.AnyPlayer.LeaveGame', LeaveGame)

 

 

Logo

一起探索未来云端世界的核心,云原生技术专区带您领略创新、高效和可扩展的云计算解决方案,引领您在数字化时代的成功之路。

更多推荐