BillboardDB.lua 3.4 KB

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