AreaBattleNS.lua 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600
  1. -- 战区争霸(普通服)
  2. local Config = require("Config")
  3. local Msg = require("core.Msg")
  4. local Lang = require("common.Lang")
  5. local ObjHuman = require("core.ObjHuman")
  6. local Broadcast = require("broadcast.Broadcast")
  7. local RoleSystemLogic = require("roleSystem.RoleSystemLogic")
  8. local RoleSystemDefine = require("roleSystem.RoleSystemDefine")
  9. local CombatDefine = require("combat.CombatDefine")
  10. local RoleDBLogic = require("role.RoleDBLogic")
  11. local CombatPosLogic = require("combat.CombatPosLogic")
  12. local CombatLogic = require("combat.CombatLogic")
  13. local MailExcel = require("excel.mail")
  14. local Util = require("common.Util")
  15. local InnerMsg = require("core.InnerMsg")
  16. local RoleHeadLogic = require("role.RoleHeadLogic")
  17. local MailManager = require("mail.MailManager")
  18. local AreaBattleConfig = require("excel.areaBattle").reward
  19. local Log = require("common.Log")
  20. local Timer = require("core.Timer")
  21. local CommonDB = require("common.CommonDB")
  22. local RoleSystemExcel = require("excel.roleSystem")
  23. local Grid = require("bag.Grid")
  24. local BillboardLogic = require("billboard.BillboardLogic")
  25. local BillboardDefine = require("billboard.BillboardDefine")
  26. local AreaBattleDefine = require("areaBattle.AreaBattleDefine")
  27. local mailQueue = {
  28. uuidArray = {},
  29. insertMaxNum = 100, -- 一次最多插入数据库的邮件数量
  30. repeatMaxTimes = 3, -- 重试次数
  31. repeatTb = {}
  32. }
  33. -- 检查是否开启
  34. local function openCheck()
  35. local wDay = Util.getWeekDay()
  36. if not table.find(AreaBattleDefine.OPEN_WDAY_AREA, wDay) then
  37. return false
  38. end
  39. local now = os.time()
  40. local toDayStartTime = Util.getDayStartTime(now)
  41. if wDay == AreaBattleDefine.OPEN_WDAY_AREA[1] and now < (toDayStartTime + AreaBattleDefine.PREPARE_STATE_START_SEC) then
  42. return false
  43. end
  44. if wDay == AreaBattleDefine.OPEN_WDAY_AREA[2] and now > (toDayStartTime + AreaBattleDefine.END_STATE_START_SEC) then
  45. return false
  46. end
  47. return true
  48. end
  49. -- 生成符合协议数据结构的奖励数据
  50. local function populateAwardMsg(msgTb, awardCfg)
  51. for idx, itemCfg in ipairs(awardCfg) do
  52. msgTb[0] = idx
  53. Grid.makeItem(msgTb[idx], itemCfg[1], itemCfg[2])
  54. end
  55. end
  56. -- 生成符合协议数据结构的英雄数据
  57. local function populateObjMsg(net, data)
  58. net.name = data.name or ""
  59. net.power = data.power or 0
  60. net.head = data.head or 0
  61. net.headFrame = data.headFrame or 0
  62. net.playerLv = data.playerLv or 90
  63. net.heroList[0] = 0
  64. for k, heroInfo in ipairs(data.heroList) do
  65. net.heroList[0] = k
  66. net.heroList[k].heroId = heroInfo.heroId or 1001
  67. net.heroList[k].heroColor = heroInfo.heroColor or 0
  68. net.heroList[k].heroStar = heroInfo.heroStar or 1
  69. net.heroList[k].heroLv = heroInfo.heroLv or 1
  70. net.heroList[k].heroCamp = heroInfo.heroCamp or 999
  71. end
  72. end
  73. local function sendMail(mailId, receiverUuid, itemArray)
  74. if not mailId or not receiverUuid then
  75. return
  76. end
  77. local mailCfg = MailExcel.mail[mailId]
  78. local content = mailCfg.content
  79. MailManager.add(MailManager.SYSTEM, receiverUuid, mailCfg.title, content, itemArray, mailCfg.senderName or "GM")
  80. end
  81. local function writeLog(logStr)
  82. Log.write(Log.LOGID_OSS_AREABATTLE_AWARD, logStr)
  83. end
  84. function mailQueue:add(playerInfo)
  85. table.insert(self.uuidArray, playerInfo)
  86. end
  87. function mailQueue:clear()
  88. Util.cleanTable(self.uuidArray)
  89. Util.cleanTable(self.repeatTb)
  90. end
  91. function mailQueue:insertDB()
  92. local maxNum = math.min(self.insertMaxNum, #self.uuidArray)
  93. for i=1, maxNum do
  94. local resTag = AreaBattleDefine.MAIL_SUCC_TAG
  95. local playerInfo = table.remove(self.uuidArray)
  96. local uuid = playerInfo[1]
  97. local awardType = playerInfo[3]
  98. local ok, err = pcall(sendMail, AreaBattleDefine.AWARDTYPE2MAILID[awardType], uuid, playerInfo[2])
  99. if not ok then
  100. if not self.repeatTb[uuid] or self.repeatTb[uuid] < self.repeatMaxTimes then
  101. mailQueue:add(playerInfo)
  102. self.repeatTb[uuid] = (self.repeatTb[uuid] or 0) + 1
  103. end
  104. resTag = AreaBattleDefine.MAIL_FAIL_TAG
  105. end
  106. local str = string.format("Result: %s, playerUuid: %s, AwardType: %d, insertErrTimes: %d, errInfo: %s",
  107. resTag, uuid, awardType, self.repeatTb[uuid] or 0, err)
  108. writeLog(str)
  109. end
  110. if #self.uuidArray > 0 then
  111. Timer.addLater(3, mailQueue.insertDB, mailQueue)
  112. end
  113. end
  114. local function insertPlayerAward(playerArr, battlePlyerArr, awardArr, awardType)
  115. local len = #playerArr
  116. for _, uuid in pairs(battlePlyerArr or {}) do
  117. len = len + 1
  118. local item = {}
  119. for idx, itemInfo in ipairs(awardArr) do
  120. item[idx] = {itemInfo[1], itemInfo[2]}
  121. end
  122. playerArr[len] = {uuid, item, awardType}
  123. end
  124. end
  125. local function genPlayerAwardArray(srvBattleRes)
  126. local DataCache = require("core.DataCache")
  127. local playerUidList = DataCache.Get_PlayerUuidList()
  128. local winAwardType, defeateAwardType, normalAwardType = AreaBattleDefine.AWARD_TYPE1, AreaBattleDefine.AWARD_TYPE2, AreaBattleDefine.AWARD_TYPE3
  129. local battleWinAwward, battleDefeatAward, normalAward = AreaBattleConfig[1].winAward1, AreaBattleConfig[1].winAward2, AreaBattleConfig[1].winAward3
  130. if srvBattleRes.isWin == 0 then
  131. winAwardType, defeateAwardType, normalAwardType = AreaBattleDefine.AWARD_TYPE4, AreaBattleDefine.AWARD_TYPE5, AreaBattleDefine.AWARD_TYPE6
  132. battleWinAwward, battleDefeatAward, normalAward = AreaBattleConfig[1].defeatAward1, AreaBattleConfig[1].defeatAward2, AreaBattleConfig[1].defeatAward3
  133. end
  134. local len = 0
  135. local playerAwardArray = {}
  136. insertPlayerAward(playerAwardArray, srvBattleRes.winPlayerArr, battleWinAwward, winAwardType)
  137. insertPlayerAward(playerAwardArray, srvBattleRes.winPlayerArr, normalAward, normalAwardType)
  138. insertPlayerAward(playerAwardArray, srvBattleRes.defeatPlayerArr, battleDefeatAward, defeateAwardType)
  139. insertPlayerAward(playerAwardArray, srvBattleRes.defeatPlayerArr, normalAward, normalAwardType)
  140. len = #playerAwardArray
  141. for uuid in pairs(playerUidList) do
  142. if not table.find(srvBattleRes.winPlayerArr, uuid) and not table.find(srvBattleRes.defeatPlayerArr, uuid) then
  143. len = len + 1
  144. local item = {}
  145. for idx, itemInfo in ipairs(normalAward) do
  146. item[idx] = {itemInfo[1], itemInfo[2]}
  147. end
  148. playerAwardArray[len] = {uuid, item, normalAwardType}
  149. end
  150. end
  151. if len == 0 then
  152. return
  153. end
  154. return playerAwardArray
  155. end
  156. -- 开服天数检查
  157. local function checkSvrOpenDays()
  158. local openDay = CommonDB.getServerOpenDay()
  159. local ctrlCfg = RoleSystemExcel.roleSystem[RoleSystemDefine.ROLE_SYS_ID_1306]
  160. if ctrlCfg.openSvrDay > openDay then
  161. return false
  162. end
  163. return true
  164. end
  165. -- 单个英雄数据
  166. -- local function getHeroInfo(human, targetHeroUuid)
  167. -- local HeroLogic = require("hero.HeroLogic")
  168. -- local heroGrid = HeroLogic.getHeroGridByUuid(human, targetHeroUuid)
  169. -- if heroGrid then
  170. -- local heroCfg = HeroExcel.hero[heroGrid.id]
  171. -- local heroInfo = {
  172. -- heroUuid = targetHeroUuid,
  173. -- heroStar = heroGrid.star,
  174. -- heroLevel = heroGrid.lv,
  175. -- heroCamp = heroGrid.camp or heroCfg.camp,
  176. -- heroBody = heroCfg.body
  177. -- }
  178. -- return heroInfo
  179. -- end
  180. -- end
  181. -- 获取上阵英雄数据
  182. -- local function getHeroListInfo(human, targetHeroUuid)
  183. -- local len = 0
  184. -- local heroArr = {}
  185. -- local heroList = CombatPosLogic.getCombatHeros(human, CombatDefine.COMBAT_TYPE32)
  186. -- if not next(heroList) then
  187. -- heroList = CombatPosLogic.getCombatHeros(human, CombatDefine.COMBAT_TYPE1)
  188. -- end
  189. -- for _, heroUuid in pairs(heroList) do
  190. -- if not targetHeroUuid or targetHeroUuid == heroUuid then
  191. -- len = len + 1
  192. -- heroArr[len] = getHeroInfo(human, heroUuid)
  193. -- end
  194. -- end
  195. -- if len == 0 then
  196. -- return
  197. -- end
  198. -- return heroArr
  199. -- end
  200. -- 生成玩家展示数据
  201. local function genPlayerShowData(playerUuid)
  202. local human = ObjHuman.onlineUuid[playerUuid]
  203. if not human then
  204. local db = RoleDBLogic.getDb(playerUuid)
  205. if not db then
  206. return
  207. end
  208. human = {}
  209. human.db = db
  210. end
  211. local showInfo = {}
  212. showInfo.uuid = playerUuid
  213. showInfo.power = human.db.zhandouli
  214. showInfo.name = human.db.name
  215. showInfo.head = RoleHeadLogic.getRoleAppearance(human, RoleHeadLogic.HEAD_TYPE_1)
  216. showInfo.headFrame = RoleHeadLogic.getRoleAppearance(human, RoleHeadLogic.HEAD_TYPE_2)
  217. -- showInfo.heroList = getHeroListInfo(human)
  218. return showInfo
  219. end
  220. -- 生成本服参战列表
  221. local function genJoinBattleArray()
  222. local rankList = BillboardLogic.GetRankList(BillboardDefine.TYPE_ZHANDOULI)
  223. if not rankList then
  224. return
  225. end
  226. local len = 0
  227. local joinBattleArray = {}
  228. for _, PlayerData in ipairs(rankList) do
  229. if len >= AreaBattleDefine.JOIN_BATTLE_MAX_CNT then
  230. break
  231. end
  232. local pkayerInfo = genPlayerShowData(PlayerData.uuid)
  233. if pkayerInfo then
  234. len = len + 1
  235. joinBattleArray[len] = pkayerInfo
  236. end
  237. end
  238. table.shuffle(joinBattleArray)
  239. return joinBattleArray
  240. end
  241. function getActState(human)
  242. local state, leftTime = 1, 0
  243. if not openCheck() then
  244. state = 0
  245. end
  246. return state, leftTime
  247. end
  248. function isOpen(human)
  249. return RoleSystemLogic.isOpen(human, RoleSystemDefine.ROLE_SYS_ID_1306)
  250. end
  251. function getCombatObjList(human, side, args, combatType)
  252. if side == CombatDefine.ATTACK_SIDE and not human then return end
  253. if side == CombatDefine.DEFEND_SIDE and human then
  254. return
  255. end
  256. if not human then
  257. local uuid = args[1]
  258. local db = RoleDBLogic.getDb(uuid)
  259. if not db then
  260. return
  261. end
  262. human = {}
  263. human.db = db
  264. end
  265. local heroList = CombatPosLogic.getCombatHeros(human, combatType)
  266. if next(heroList) then
  267. return CombatLogic.getHumanObjList(human, combatType)
  268. else
  269. return CombatLogic.getHumanObjList(human, CombatDefine.COMBAT_TYPE1)
  270. end
  271. end
  272. --------------------------------------------N2C----------------------------------------------------
  273. -- 加入战斗
  274. local function joinBattle()
  275. local joinBattleArray = genJoinBattleArray()
  276. -- if not joinBattleArray or #joinBattleArray <= 0 then
  277. -- return
  278. -- end
  279. local msgData = InnerMsg.lw.LW_AREABATTLE_JOIN_BATTLE
  280. msgData.sourceServerId = Config.SVR_INDEX
  281. msgData.joinBattleArray = joinBattleArray or {}
  282. InnerMsg.sendMsg(0, msgData)
  283. end
  284. -- 获取活动基础信息
  285. function GetBaseInfo(human)
  286. local msgData = InnerMsg.lw.LW_AREABATTLE_BASEINFO_QUERY
  287. msgData.sourceServerId = Config.SVR_INDEX
  288. msgData.playerUuid = human.db._id
  289. InnerMsg.sendMsg(0, msgData)
  290. end
  291. -- 获取本服参战玩家列表
  292. function GetJoinPlayerArr(human)
  293. -- if not openCheck() then
  294. -- local msgRet = Msg.gc.GC_AREABATTLE_JOINPLAYER_QUERY
  295. -- msgRet.errCode = -2
  296. -- msgRet.isJoin = 0
  297. -- msgRet.playerArray[0] = 0
  298. -- return Msg.send(msgRet, human.fd)
  299. -- end
  300. local msgData = InnerMsg.lw.LW_AREABATTLE_JOINPLAYER_QUERY
  301. msgData.sourceServerId = Config.SVR_INDEX
  302. msgData.playerUuid = human.db._id
  303. InnerMsg.sendMsg(0, msgData)
  304. end
  305. -- 获取区服匹配列表(两两匹配)
  306. function GetMatchList(human)
  307. -- if not openCheck() then
  308. -- local msgRet = Msg.gc.GC_AREABATTLE_MATCHLIST_QUERY
  309. -- msgRet.errCode = -2
  310. -- msgRet.matchList[0] = 0
  311. -- return Msg.send(msgRet, human.fd)
  312. -- end
  313. local msgData = InnerMsg.lw.LW_AREABATTLE_MATCHLIST_QUERY
  314. msgData.sourceServerId = Config.SVR_INDEX
  315. msgData.playerUuid = human.db._id
  316. InnerMsg.sendMsg(0, msgData)
  317. end
  318. --获取录像
  319. function GetCombatVideo(human)
  320. -- if not openCheck() then
  321. -- local msgRet = Msg.gc.GC_GODSAREA_QUERY_COMBATVIDEO
  322. -- msgRet.errCode = -2
  323. -- msgRet.leftWinTimes = 0
  324. -- msgRet.rightWinTimes = 0
  325. -- msgRet.leftSrvName = ""
  326. -- msgRet.leftSrvPower = 0
  327. -- msgRet.rightSrvName = ""
  328. -- msgRet.rightSrvPower = 0
  329. -- msgRet.videoList[0] = 0
  330. -- return Msg.send(msgRet, human.fd)
  331. -- end
  332. local msgData = InnerMsg.lw.LW_AREABATTLE_VIDEOSHOW_QUERY
  333. msgData.sourceServerId = Config.SVR_INDEX
  334. msgData.playerUuid = human.db._id
  335. InnerMsg.sendMsg(0, msgData)
  336. end
  337. -- 获取奖励列表
  338. function GetAwardInfo(human)
  339. local msgRet = Msg.gc.GC_AREABATTLE_REWARD_QUERY
  340. populateAwardMsg(msgRet.winJoinAward, AreaBattleConfig[1].winAward1)
  341. populateAwardMsg(msgRet.winJoinAward2, AreaBattleConfig[1].winAward2)
  342. populateAwardMsg(msgRet.winNormalAward, AreaBattleConfig[1].winAward3)
  343. populateAwardMsg(msgRet.defaultJoinAward, AreaBattleConfig[1].defeatAward1)
  344. populateAwardMsg(msgRet.defaultJoinAward2, AreaBattleConfig[1].defeatAward2)
  345. populateAwardMsg(msgRet.defaultNormalAward, AreaBattleConfig[1].defeatAward3)
  346. Msg.send(msgRet, human.fd)
  347. end
  348. --------------------------------------------C2N----------------------------------------------------
  349. -- 收到活动开启通知
  350. function C2N_BattleStart()
  351. if not checkSvrOpenDays() then
  352. return
  353. end
  354. joinBattle()
  355. end
  356. -- 收到活动基础信息
  357. function C2N_BaseInfo(msg)
  358. local human = ObjHuman.onlineUuid[msg.playerUuid]
  359. if not human then
  360. return
  361. end
  362. local msgRet = Msg.gc.GC_AREABATTLE_BASEINFO_QUERY
  363. msgRet.stage = msg.stage
  364. msgRet.startTime = msg.startTime
  365. msgRet.endTime = msg.endTime
  366. Msg.send(msgRet, human.fd)
  367. end
  368. -- 收到本服参战玩家列表
  369. function C2N_JoinPlayerArr(msg)
  370. local human = ObjHuman.onlineUuid[msg.playerUuid]
  371. if not human then
  372. return
  373. end
  374. local msgRet = Msg.gc.GC_AREABATTLE_JOINPLAYER_QUERY
  375. msgRet.errCode = msg.errCode
  376. msgRet.isJoin = 0
  377. msgRet.playerArray[0] = 0
  378. if msg.errCode == 0 then
  379. local playerArray = msg.playerArray
  380. table.sort(playerArray, function (a, b)
  381. return a.power > b.power
  382. end)
  383. for k, v in ipairs(playerArray) do
  384. msgRet.playerArray[0] = k
  385. msgRet.playerArray[k].name = v.name
  386. msgRet.playerArray[k].power = v.power
  387. msgRet.playerArray[k].head = v.head
  388. msgRet.playerArray[k].headFrame = v.headFrame
  389. msgRet.playerArray[k].isMe = 0
  390. if v.uuid == msg.playerUuid then
  391. msgRet.isJoin = 1
  392. msgRet.playerArray[k].isMe = 1
  393. end
  394. end
  395. end
  396. Msg.send(msgRet, human.fd)
  397. end
  398. -- 收到本轮活动的区服匹配列表
  399. function C2N_MatchList(msg)
  400. local human = ObjHuman.onlineUuid[msg.playerUuid]
  401. if not human then
  402. return
  403. end
  404. local msgRet = Msg.gc.GC_AREABATTLE_MATCHLIST_QUERY
  405. msgRet.errCode = 0
  406. local matchListMsg = msgRet.matchList
  407. matchListMsg[0] = 0
  408. if not next(msg.matchList) then
  409. msgRet.errCode = -1
  410. else
  411. for k, v in ipairs(msg.matchList) do
  412. matchListMsg[0] = k
  413. --for _, srvInfo in ipairs(v) do
  414. local leftSrv = v[1]
  415. local rightSrv = v[2]
  416. matchListMsg[k].leftSrvName = (leftSrv[1] - AreaBattleDefine.SRV_START_IDX) .. AreaBattleDefine.SRV_NAME_STR
  417. matchListMsg[k].leftSrvPower = leftSrv[2]
  418. matchListMsg[k].rightSrvName = (rightSrv[1] - AreaBattleDefine.SRV_START_IDX) .. AreaBattleDefine.SRV_NAME_STR
  419. matchListMsg[k].rightSrvPower = rightSrv[2]
  420. matchListMsg[k].mySrvPos = 0
  421. if leftSrv[1] == Config.SVR_INDEX then
  422. matchListMsg[k].mySrvPos = 1
  423. elseif rightSrv[1] == Config.SVR_INDEX then
  424. matchListMsg[k].mySrvPos = 2
  425. end
  426. --end
  427. end
  428. end
  429. Msg.send(msgRet, human.fd)
  430. end
  431. -- 收到本服的战斗录像展示数据
  432. function C2N_VideoShowData(msg)
  433. local human = ObjHuman.onlineUuid[msg.playerUuid]
  434. if not human then
  435. return
  436. end
  437. local errCode = msg.errCode
  438. local msgRet = Msg.gc.GC_AREABATTLE_COMBATVIDEO_QUERY
  439. msgRet.errCode = errCode
  440. msgRet.leftWinTimes = 0
  441. msgRet.rightWinTimes = 0
  442. msgRet.leftSrvName = ""
  443. msgRet.leftSrvPower = 0
  444. msgRet.rightSrvName = ""
  445. msgRet.rightSrvPower = 0
  446. msgRet.videoList[0] = 0
  447. if errCode ~= 0 then
  448. return Msg.send(msgRet, human.fd)
  449. end
  450. local srvInfo = msg.srvInfo
  451. msgRet.leftWinTimes = srvInfo.leftWinTimes
  452. msgRet.rightWinTimes = srvInfo.rightWinTimes
  453. msgRet.leftSrvName = (srvInfo.leftSrvId - AreaBattleDefine.SRV_START_IDX) .. AreaBattleDefine.SRV_NAME_STR
  454. msgRet.leftSrvPower = srvInfo.leftSrvPower
  455. msgRet.rightSrvName = (srvInfo.rightSrvId - AreaBattleDefine.SRV_START_IDX) .. AreaBattleDefine.SRV_NAME_STR
  456. msgRet.rightSrvPower = srvInfo.rightSrvPower
  457. for k, v in ipairs(msg.videoShowData) do
  458. msgRet.videoList[0] = k
  459. -- msgRet.videoList[k].atkData = v.atkData
  460. -- msgRet.videoList[k].defenerData = v.defenerData
  461. populateObjMsg(msgRet.videoList[k].atkData, v.atkData)
  462. populateObjMsg(msgRet.videoList[k].defenerData, v.defenerData)
  463. msgRet.videoList[k].atkFormation = v.atkFormation
  464. msgRet.videoList[k].defenerFormation = v.defenerFormation
  465. msgRet.videoList[k].round = v.round
  466. msgRet.videoList[k].maxRound = v.maxRound
  467. msgRet.videoList[k].time = v.time
  468. msgRet.videoList[k].videoUuid = v.videoUuid
  469. msgRet.videoList[k].result = v.result
  470. msgRet.videoList[k].myPos = 0
  471. if k == 1 then
  472. if v.atkData.uuid == msg.playerUuid then
  473. msgRet.videoList[k].myPos = 1
  474. elseif v.defenerData.uuid == msg.playerUuid then
  475. msgRet.videoList[k].myPos = 2
  476. end
  477. end
  478. end
  479. Msg.send(msgRet, human.fd)
  480. end
  481. -- 收到给玩家发奖励通知
  482. function C2N_SendReward(msg)
  483. local playerAwardArray = genPlayerAwardArray(msg.srvBattleRes)
  484. if not playerAwardArray then
  485. return
  486. end
  487. mailQueue:clear()
  488. for _, playerInfo in ipairs(playerAwardArray) do
  489. mailQueue:add(playerInfo)
  490. end
  491. mailQueue:insertDB()
  492. end