| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129 |
- local BillboardDefine = require("billboard.BillboardDefine")
- local BRoleLogic = require("billboard.BRoleLogic")
- local BUnionLogic = require("billboard.BUnionLogic")
- local BJJCLogic = require("billboard.BJJCLogic")
- local JjcLadderMiddle = require("jjcLadder.JjcLadderMiddle")
- fields = {zhandouli=1,guajiID=1,lv=1,tower=1,combatHero=1,heroBag =1, lianyu = 1 , dragonCopy = 1, absAct = 1}
- local newFiles = {zhandouli=1,guajiID=1,lv=1,tower=1,combatHero=1,heroBag =1, lianyu = 1 , dragonCopy = 1, absAct = 1, maxBattleTime = 1}
- unionFields = {lv=1,zhandouli=1}
- db = db or {}
- -- 初始排行榜
- function initBoard(boardType)
- local board = {}
- board.uuid2rank = {} -- 根据UUID获取名次
- board.rank2data = {} -- 根据名次获取DATA
- board.dirty = nil -- 是否改变过
- board.lastSortTime = nil -- 最近刷新时间
- board.boardType = boardType -- 类型
- db[boardType] = board
- end
- -- 启动后初始化
- function initAfterStart()
- for boardType = 1, BillboardDefine.BOARDTYPE_CNT do
- initBoard(boardType)
- end
- --中心服不处理
- if _G.is_middle == true then return end
- BRoleLogic.loadBoard()
- BUnionLogic.loadUnionBoard()
- end
- -- 初始玩家/公会排名data
- function initRankData(rankData)
- rankData = rankData or {}
- rankData.value1 = 0
- rankData.value2 = 0
- rankData.time = 0
- rankData.uuid = nil
- rankData.roleBase = nil
- return rankData
- end
- -- 排序
- local function updateRank(board)
- if not board then return end
- for uuid in pairs(board.uuid2rank) do
- board.uuid2rank[uuid] = nil
- end
- for rank, data in ipairs(board.rank2data) do
- board.uuid2rank[data.uuid] = rank
- end
- end
- -- 检查是否需要刷新(部分排行榜)
- function checkNeedSort(board)
- local nowTime = os.time()
- local lastSortTime = board.lastSortTime or 0
- board.lastSortTime = nowTime
- if nowTime - lastSortTime > BillboardDefine.SORTLAST_TIME then
- return true
- end
- end
- -- 刷新上榜时间
- function refreshTime(boardType, db)
- db.billboard = db.billboard or {}
- db.billboard[boardType] = os.time()
- end
- -- 获取上榜时间
- function getTime(boardType, db)
- if not db.billboard then
- return
- end
- return db.billboard[boardType]
- end
- -- 获取排名名次
- function getRank(boardType, uuid)
- local board = getBoard(boardType)
- if not board then return end
- return board.uuid2rank[uuid]
- end
- -- 根据名次获取信息
- function getRankData(boardType, rank)
- local board = getBoard(boardType)
- if not board then return end
- return board.rank2data[rank]
- end
- -- 获取
- function getBoard(boardType, nosort)
- local board = db[boardType]
- if boardType == BillboardDefine.TYPE_JJC and checkNeedSort(board) then
- BJJCLogic.loadJJCBoard()
- end
- if board and board.dirty and (not nosort) then
- board.dirty = nil
- updateRank(board)
- elseif boardType == BillboardDefine.TYPE_JJCLADDER_M then
- if _G.is_middle then
- return JjcLadderMiddle.getBoard()
- end
- end
- return board
- end
- -- 公会解散 从公会排行榜中把 公会去除
- function dismissUnion(unionUuid)
- local board = getBoard(BillboardDefine.TYPE_UNION)
- if not board then return end
- local rank = board.uuid2rank[unionUuid]
- if rank and rank > 0 and board.rank2data[rank] then
- table.remove(board.rank2data , rank )
- board.uuid2rank[unionUuid] = nil
- updateRank(board)
- end
- end
|