GodsAreaDB.lua 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161
  1. -- 诸神圣域
  2. local LuaMongo = _G.lua_mongo
  3. local DB = require("common.DB")
  4. local Log = require("common.Log")
  5. local CreateRole = require("role.CreateRole")
  6. local GodsAreaConfig = require("excel.godsArea").rankList
  7. local rankList = {}
  8. local updateDBFile = {id = nil}
  9. local UPDATE_TAG = "update"
  10. local DELTE_TAG = "delete"
  11. local function generatePlayer(rank)
  12. local player = {}
  13. player.rank = rank
  14. player.head = CreateRole.getRandomHead()
  15. player.name = CreateRole.getRandomName()
  16. player.body = CreateRole.getRandomBody()
  17. player.headFrame = CreateRole.getRandomHeadFrame()
  18. player.level = 100
  19. -- 真实玩家才有这些数据
  20. -- player.uid = ""
  21. -- player.serverId = 0
  22. -- player.power = 0
  23. -- player.heroList =
  24. -- {
  25. -- heroUuid = heroUuid,
  26. -- heroStar = heroStar,
  27. -- heroLevel = heroLevel,
  28. -- heroCamp = heroCamp,
  29. -- heroBody = heroBody,
  30. -- }
  31. return player
  32. end
  33. local function writeLog(logStr)
  34. Log.write(Log.LOGID_OSS_GODSAREA_CHALLENGE, logStr)
  35. end
  36. local function loadData()
  37. local len = 0
  38. LuaMongo.find(DB.db_gods_area)
  39. while true do
  40. local player = {}
  41. if not LuaMongo.next(player) then
  42. break
  43. end
  44. len = len + 1
  45. rankList[len] = player
  46. end
  47. if #rankList > 0 then
  48. table.sort(rankList, function (a, b)
  49. return a.rank < b.rank
  50. end)
  51. end
  52. end
  53. local function insertData(data)
  54. LuaMongo.insert(DB.db_gods_area, data)
  55. end
  56. local function updateData(data)
  57. updateDBFile._id = data._id
  58. LuaMongo.update(DB.db_gods_area, updateDBFile, data)
  59. end
  60. local function initRankList()
  61. for rank in ipairs(GodsAreaConfig) do
  62. rankList[rank] = generatePlayer(rank)
  63. insertData(rankList[rank])
  64. end
  65. end
  66. function initAfterStart()
  67. if _G.is_middle ~= true then return end
  68. if #rankList > 0 then
  69. return
  70. end
  71. loadData()
  72. if #rankList <= 0 then
  73. initRankList()
  74. end
  75. end
  76. -- 合服后处理排行榜
  77. function UpdateAfterMergeSrv(newSrvIdTb, removeTb)
  78. if #rankList <= 0 then
  79. initAfterStart()
  80. end
  81. local bl = false
  82. local opType = UPDATE_TAG
  83. for rank, rankData in ipairs(rankList) do
  84. bl = false
  85. local serverId = rankData.serverId
  86. local oldName = rankData.name
  87. if serverId then
  88. if newSrvIdTb[serverId] then
  89. rankData.serverId = newSrvIdTb[serverId]
  90. bl = true
  91. opType = UPDATE_TAG
  92. end
  93. if removeTb[serverId] then
  94. local id = rankList[rank]._id
  95. rankList[rank] = generatePlayer(rank)
  96. rankList[rank]._id = id
  97. bl = true
  98. opType = DELTE_TAG
  99. end
  100. if bl then
  101. updateData(rankList[rank])
  102. local logStr = string.format("opType: %s, rank: %d, oldUuid: %s, newUuid: %s, oldName: %s, newName: %s, oldServerId: %d, newServerId: %d",
  103. opType, rank, rankData.uid, rankList[rank].uid or "", oldName, rankList[rank].name or "", serverId, rankList[rank].serverId or 0)
  104. writeLog(logStr)
  105. end
  106. end
  107. end
  108. end
  109. function GetRankList()
  110. return rankList
  111. end
  112. function UpdateRankData(rank, newRankData)
  113. rankList[rank] = newRankData
  114. updateData(rankList[rank])
  115. end