AreaBattleDB.lua 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237
  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. -- prepareStartTi = nil,
  19. -- nowRoundStartTi = 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.prepareStartTi = nil
  52. AreaBattleData.nowRoundStartTi = os.time()
  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.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. }
  97. end
  98. end
  99. end
  100. -- 生成某个服的录像展示数据
  101. local function genSrvVideoSHowData(videoSecondIdx)
  102. local videoArr = CombatVideo.getCombatVideosByType(CombatVideo.VIDEOTYPE_AREABATTLE, videoSecondIdx)
  103. if #videoArr == 0 then
  104. return
  105. end
  106. VideoShowCache[videoSecondIdx] = {}
  107. for k, videoInfo in ipairs(videoArr) do
  108. local combatInfo = videoInfo.combatInfo
  109. VideoShowCache[videoSecondIdx][k] = VideoShowCache[videoSecondIdx][k] or {}
  110. local videoData = VideoShowCache[videoSecondIdx][k]
  111. videoData.atkData = {}
  112. genObjShowInfo(videoData.atkData, combatInfo.attacker, CombatDefine.SIDE2POS[CombatDefine.ATTACK_SIDE], combatInfo.objList)
  113. videoData.defenerData = {}
  114. genObjShowInfo(videoData.defenerData, combatInfo.defender, CombatDefine.SIDE2POS[CombatDefine.DEFEND_SIDE], combatInfo.objList)
  115. videoData.atkFormation = combatInfo.atkFormation
  116. videoData.defenerFormation = combatInfo.defFormation
  117. videoData.round = combatInfo.result.round
  118. videoData.maxRound = combatInfo.maxRound
  119. videoData.time = combatInfo.time
  120. videoData.videoUuid = videoInfo._id
  121. videoData.result = combatInfo.isWin == true and 1 or 0
  122. end
  123. end
  124. function initAfterStart()
  125. if _G.is_middle ~= true then return end
  126. loadData()
  127. end
  128. function ResetData()
  129. resetData()
  130. end
  131. function GetPrepareStartTi()
  132. return AreaBattleData and AreaBattleData.prepareStartTi or 0
  133. end
  134. function GetNowRoundStartTi()
  135. return AreaBattleData and AreaBattleData.nowRoundStartTi or 0
  136. end
  137. function GetState()
  138. return AreaBattleData and AreaBattleData.state or AreaBattleDefine.STATE_END
  139. end
  140. function UpdateState(newState)
  141. AreaBattleData = AreaBattleData or {}
  142. AreaBattleData.state = newState
  143. updateValue("state", newState)
  144. if newState == AreaBattleDefine.STATE_PREPARE then
  145. local now = os.time()
  146. AreaBattleData.prepareStartTi = now
  147. updateValue("prepareStartTi", AreaBattleData.prepareStartTi)
  148. AreaBattleData.nowRoundStartTi = now
  149. updateValue("nowRoundStartTi", AreaBattleData.nowRoundStartTi)
  150. end
  151. end
  152. function GetJoinSrvArr()
  153. return AreaBattleData.joinSrvArr
  154. end
  155. function UpdateJoinSrvArr(newJoinSrvArr)
  156. AreaBattleData = AreaBattleData or {}
  157. AreaBattleData.joinSrvArr = newJoinSrvArr
  158. updateValue("joinSrvArr", newJoinSrvArr)
  159. end
  160. function GetServerList()
  161. return AreaBattleData.serverList
  162. end
  163. function UpdateServerList(newServerList)
  164. AreaBattleData = AreaBattleData or {}
  165. AreaBattleData.serverList = newServerList
  166. updateValue("serverList", newServerList)
  167. end
  168. function GetMatchSrvArr()
  169. return AreaBattleData.matchSrvArr
  170. end
  171. function UpdateMatchSrvArrt(newMatchSrvArr)
  172. AreaBattleData = AreaBattleData or {}
  173. AreaBattleData.matchSrvArr = newMatchSrvArr
  174. updateValue("matchSrvArr", newMatchSrvArr)
  175. end
  176. function GetSrvVideoShowData(videoSecondIdx)
  177. if not videoSecondIdx then
  178. return
  179. end
  180. if not VideoShowCache[videoSecondIdx] then
  181. genSrvVideoSHowData(videoSecondIdx)
  182. end
  183. return VideoShowCache[videoSecondIdx]
  184. end
  185. function ResetVideoShowCache()
  186. VideoShowCache = {}
  187. end