AreaBattleDB.lua 6.4 KB

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