BillboardDB.lua 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. local BillboardDefine = require("billboard.BillboardDefine")
  2. local BRoleLogic = require("billboard.BRoleLogic")
  3. local BUnionLogic = require("billboard.BUnionLogic")
  4. local BJJCLogic = require("billboard.BJJCLogic")
  5. local JjcLadderMiddle = require("jjcLadder.JjcLadderMiddle")
  6. fields = {zhandouli=1,guajiID=1,lv=1,tower=1,combatHero=1,heroBag =1, lianyu = 1 , dragonCopy = 1, absAct = 1}
  7. unionFields = {lv=1,zhandouli=1}
  8. db = db or {}
  9. -- 初始排行榜
  10. function initBoard(boardType)
  11. local board = {}
  12. board.uuid2rank = {} -- 根据UUID获取名次
  13. board.rank2data = {} -- 根据名次获取DATA
  14. board.dirty = nil -- 是否改变过
  15. board.lastSortTime = nil -- 最近刷新时间
  16. board.boardType = boardType -- 类型
  17. db[boardType] = board
  18. end
  19. -- 启动后初始化
  20. function initAfterStart()
  21. for boardType = 1, BillboardDefine.BOARDTYPE_CNT do
  22. initBoard(boardType)
  23. end
  24. --中心服不处理
  25. if _G.is_middle == true then return end
  26. BRoleLogic.loadBoard()
  27. BUnionLogic.loadUnionBoard()
  28. end
  29. -- 初始玩家/公会排名data
  30. function initRankData(rankData)
  31. rankData = rankData or {}
  32. rankData.value1 = 0
  33. rankData.value2 = 0
  34. rankData.time = 0
  35. rankData.uuid = nil
  36. rankData.roleBase = nil
  37. return rankData
  38. end
  39. -- 排序
  40. local function updateRank(board)
  41. if not board then return end
  42. for uuid in pairs(board.uuid2rank) do
  43. board.uuid2rank[uuid] = nil
  44. end
  45. for rank, data in ipairs(board.rank2data) do
  46. board.uuid2rank[data.uuid] = rank
  47. end
  48. end
  49. -- 检查是否需要刷新(部分排行榜)
  50. function checkNeedSort(board)
  51. local nowTime = os.time()
  52. local lastSortTime = board.lastSortTime or 0
  53. board.lastSortTime = nowTime
  54. if nowTime - lastSortTime > BillboardDefine.SORTLAST_TIME then
  55. return true
  56. end
  57. end
  58. -- 刷新上榜时间
  59. function refreshTime(boardType, db)
  60. db.billboard = db.billboard or {}
  61. db.billboard[boardType] = os.time()
  62. end
  63. -- 获取上榜时间
  64. function getTime(boardType, db)
  65. if not db.billboard then
  66. return
  67. end
  68. return db.billboard[boardType]
  69. end
  70. -- 获取排名名次
  71. function getRank(boardType, uuid)
  72. local board = getBoard(boardType)
  73. if not board then return end
  74. return board.uuid2rank[uuid]
  75. end
  76. -- 根据名次获取信息
  77. function getRankData(boardType, rank)
  78. local board = getBoard(boardType)
  79. if not board then return end
  80. return board.rank2data[rank]
  81. end
  82. -- 获取
  83. function getBoard(boardType, nosort)
  84. local board = db[boardType]
  85. if boardType == BillboardDefine.TYPE_JJC and checkNeedSort(board) then
  86. BJJCLogic.loadJJCBoard()
  87. end
  88. if board and board.dirty and (not nosort) then
  89. board.dirty = nil
  90. updateRank(board)
  91. elseif boardType == BillboardDefine.TYPE_JJCLADDER_M then
  92. if _G.is_middle then
  93. return JjcLadderMiddle.getBoard()
  94. end
  95. end
  96. return board
  97. end
  98. -- 公会解散 从公会排行榜中把 公会去除
  99. function dismissUnion(unionUuid)
  100. local board = getBoard(BillboardDefine.TYPE_UNION)
  101. if not board then return end
  102. local rank = board.uuid2rank[unionUuid]
  103. if rank and rank > 0 and board.rank2data[rank] then
  104. table.remove(board.rank2data , rank )
  105. board.uuid2rank[unionUuid] = nil
  106. updateRank(board)
  107. end
  108. end