AreaBattleDB.lua 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245
  1. -- 战区争霸(DB)
  2. local LuaMongo = _G.lua_mongo
  3. local DB = require("common.DB")
  4. local Log = require("common.Log")
  5. local AreaBattleDefine = require("areaBattle.AreaBattleDefine")
  6. local CombatVideo = require("combat.CombatVideo")
  7. local CombatDefine = require("combat.CombatDefine")
  8. local dBUpdate = {_id=nil}
  9. local dBUpdateField = {}
  10. -- 用于展示的简单录像数据
  11. VideoShowCache = {}
  12. -- DB
  13. AreaBattleData = nil
  14. -- {
  15. -- state = 1,
  16. -- joinSrvArr = {serverId1, serverId2, serverId3}, -- 参加活动的服务器列表
  17. -- matchSrvArr = { {serverId1, serverId3}, {serverId2, serverId4} }, -- 匹配成功的服务器列表
  18. -- nowRoundStartTi = nil, -- 本轮活动开启时间
  19. -- upLoadStartTi = nil, -- 玩家战斗数据上传时间,
  20. -- serverList = { -- 服务器信息列表
  21. -- [serverId] = {
  22. -- serverId = serverId,
  23. -- winTimes = 0,
  24. -- defeatTimes = 0,
  25. -- winPlayerArr = {playerUuid1, playerUuid2,},
  26. -- playerInfoArr = {
  27. -- {
  28. -- uuid = uuid,
  29. -- power = power,
  30. -- name = name,
  31. -- head = head,
  32. -- headFrame = headFrame,
  33. -- },
  34. -- },
  35. -- },
  36. -- }
  37. -- }
  38. local function initData()
  39. AreaBattleData = {}
  40. AreaBattleData.state = AreaBattleDefine.STATE_END
  41. AreaBattleData.joinSrvArr = {}
  42. AreaBattleData.matchSrvArr = {}
  43. AreaBattleData.serverList = {}
  44. LuaMongo.insert(DB.db_area_battle, AreaBattleData)
  45. end
  46. local function resetData()
  47. AreaBattleData.state = AreaBattleDefine.STATE_END
  48. AreaBattleData.joinSrvArr = {}
  49. AreaBattleData.matchSrvArr = {}
  50. AreaBattleData.serverList = {}
  51. AreaBattleData.nowRoundStartTi = os.time()
  52. AreaBattleData.upLoadStartTi = nil
  53. dBUpdate._id = AreaBattleData._id
  54. LuaMongo.update(DB.db_area_battle, dBUpdate, AreaBattleData)
  55. end
  56. local function loadData()
  57. LuaMongo.find(DB.db_area_battle)
  58. local data = {}
  59. if LuaMongo.next(data) then
  60. AreaBattleData = data
  61. else
  62. initData()
  63. end
  64. end
  65. -- 修改db单个字段
  66. local function updateValue(key, value)
  67. if not key then return end
  68. if value then
  69. dBUpdateField["$set"] = {[key]=value}
  70. dBUpdateField["$unset"] = nil
  71. else
  72. dBUpdateField["$set"] = nil
  73. dBUpdateField["$unset"] = {[key]=1}
  74. end
  75. dBUpdate._id = AreaBattleData._id
  76. LuaMongo.update(DB.db_area_battle, dBUpdate, dBUpdateField)
  77. end
  78. -- 生成录像数据中的英雄展示数据
  79. local function genObjShowInfo(net, playerData, posArr, objList)
  80. net.name = playerData.name
  81. net.power = playerData.zhandouli
  82. net.head = playerData.head
  83. net.headFrame = playerData.headFrame
  84. net.playerLv = playerData.lv
  85. net.uuid = playerData.uuid
  86. net.heroList = {}
  87. local len = 0
  88. for _,pos in ipairs(posArr) do
  89. local grid = objList and objList[pos]
  90. if grid and grid.id ~= 0 then
  91. len = len + 1
  92. net.heroList[len] = {
  93. heroId = grid.id,
  94. heroColor = grid.quality or 0,
  95. heroStar = grid.star or 0,
  96. heroLv = grid.lv or 0,
  97. heroCamp = grid.camp or 999
  98. }
  99. end
  100. end
  101. end
  102. -- 生成某个服的录像展示数据
  103. local function genSrvVideoSHowData(videoSecondIdx)
  104. local videoArr = CombatVideo.getCombatVideosByType(CombatVideo.VIDEOTYPE_AREABATTLE, videoSecondIdx)
  105. if #videoArr == 0 then
  106. return
  107. end
  108. VideoShowCache[videoSecondIdx] = {}
  109. for k, videoInfo in ipairs(videoArr) do
  110. local combatInfo = videoInfo.combatInfo
  111. VideoShowCache[videoSecondIdx][k] = VideoShowCache[videoSecondIdx][k] or {}
  112. local videoData = VideoShowCache[videoSecondIdx][k]
  113. videoData.atkData = {}
  114. genObjShowInfo(videoData.atkData, combatInfo.attacker, CombatDefine.SIDE2POS[CombatDefine.ATTACK_SIDE], combatInfo.objList)
  115. videoData.defenerData = {}
  116. genObjShowInfo(videoData.defenerData, combatInfo.defender, CombatDefine.SIDE2POS[CombatDefine.DEFEND_SIDE], combatInfo.objList)
  117. videoData.atkFormation = combatInfo.atkFormation
  118. videoData.defenerFormation = combatInfo.defFormation
  119. videoData.round = combatInfo.result.round
  120. videoData.maxRound = combatInfo.maxRound
  121. videoData.time = combatInfo.time
  122. videoData.videoUuid = videoInfo._id
  123. videoData.result = combatInfo.isWin == true and 1 or 0
  124. end
  125. end
  126. function initAfterStart()
  127. if _G.is_middle ~= true then return end
  128. loadData()
  129. end
  130. function ResetData()
  131. resetData()
  132. end
  133. function GetNowRoundStartTi()
  134. return AreaBattleData and AreaBattleData.nowRoundStartTi or 0
  135. end
  136. function GetUpLoadStartTi()
  137. return AreaBattleData and AreaBattleData.upLoadStartTi or 0
  138. end
  139. function UpdateUpLoadStartTi(newUpLoadStartTi)
  140. AreaBattleData = AreaBattleData or {}
  141. AreaBattleData.upLoadStartTi = newUpLoadStartTi
  142. updateValue("upLoadStartTi", newUpLoadStartTi)
  143. end
  144. function GetState()
  145. return AreaBattleData and AreaBattleData.state or AreaBattleDefine.STATE_END
  146. end
  147. function UpdateState(newState)
  148. AreaBattleData = AreaBattleData or {}
  149. AreaBattleData.state = newState
  150. updateValue("state", newState)
  151. if newState == AreaBattleDefine.STATE_PREPARE then
  152. local now = os.time()
  153. AreaBattleData.nowRoundStartTi = now
  154. updateValue("nowRoundStartTi", AreaBattleData.nowRoundStartTi)
  155. end
  156. end
  157. function GetJoinSrvArr()
  158. return AreaBattleData.joinSrvArr
  159. end
  160. function UpdateJoinSrvArr(newJoinSrvArr)
  161. AreaBattleData = AreaBattleData or {}
  162. AreaBattleData.joinSrvArr = newJoinSrvArr
  163. updateValue("joinSrvArr", newJoinSrvArr)
  164. end
  165. function GetServerList()
  166. return AreaBattleData.serverList
  167. end
  168. function UpdateServerList(newServerList)
  169. AreaBattleData = AreaBattleData or {}
  170. AreaBattleData.serverList = newServerList
  171. updateValue("serverList", newServerList)
  172. end
  173. function GetMatchSrvArr()
  174. return AreaBattleData.matchSrvArr
  175. end
  176. function UpdateMatchSrvArr(newMatchSrvArr)
  177. AreaBattleData = AreaBattleData or {}
  178. AreaBattleData.matchSrvArr = newMatchSrvArr
  179. updateValue("matchSrvArr", newMatchSrvArr)
  180. end
  181. function GetSrvVideoShowData(videoSecondIdx)
  182. if not videoSecondIdx then
  183. return
  184. end
  185. if not VideoShowCache[videoSecondIdx] then
  186. genSrvVideoSHowData(videoSecondIdx)
  187. end
  188. return VideoShowCache[videoSecondIdx]
  189. end
  190. function ResetVideoShowCache()
  191. VideoShowCache = {}
  192. end