| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787 |
- -------------------------------------------------------
- -- 天梯争霸 跨服逻辑
- -------------------------------------------------------
- local LuaMongo = _G.lua_mongo
- local DB = require("common.DB")
- local Util = require("common.Util")
- local Lang = require("common.Lang")
- local Log = require("common.Log")
- local InnerMsg = require("core.InnerMsg")
- local BillboardDB = require("billboard.BillboardDB")
- local BillboardDefine = require("billboard.BillboardDefine")
- local MiddleLogic = require("middle.MiddleLogic")
- local MiddleManager = require("middle.MiddleManager")
- local JjcLadderLogic = require("jjcLadder.JjcLadderLogic")
- local RoleLogic = require("role.RoleLogic")
- local QueryByUuid = {_id = nil}
- local FieldSort = {rolebase = 1}
- local FieldLogDel = {cnt = 1}
- local FieldCombatLog = {time=1,attacker=1,defender=1,isWin=1,jjcLadder=1}
- local DBUpdateField = {} -- 更新域
- local LASTTOP_CNT = 100
- local BOARD_MAX_CNT = 50
- local LOG_MAX_CNT = 30
- local RANDOM_TARGET_CNT = 5
- function saveTop(uuid2beMobaiCnt)
- local commonDB = JjcLadderLogic.getCommonDB()
- local rank2uuid = commonDB.rank2uuid
- local lastTopList = commonDB.lastTopList
- -- 保存上一次前x信息
- commonDB.lastTopList = {}
- commonDB.lastUuid2Rank = {}
- for i = 1, LASTTOP_CNT do
- local uuid = rank2uuid and rank2uuid[i]
- local playerData = uuid and getPlayerData(uuid)
- if not playerData then break end
-
- commonDB.lastUuid2Rank[uuid] = i
- commonDB.lastTopList[i] = playerData.rolebase
- if uuid2beMobaiCnt and uuid2beMobaiCnt[uuid] then
- playerData.rolebase.beMobaiCnt = uuid2beMobaiCnt[uuid]
- end
- end
- JjcLadderLogic.saveCommonDB(commonDB)
- end
- -- 重置活动数据
- function resetDB()
- local commonDB = JjcLadderLogic.getCommonDB()
- commonDB.uuid2rank = nil
- commonDB.rank2uuid = nil
- commonDB.uuid2logs = nil
- commonDB.logReds = nil
- commonDB.cleanTime = JjcLadderLogic.getCleanUpTime()
- -- 保存上一次前x信息
- --[[
- commonDB.lastTopList = {}
- commonDB.lastUuid2Rank = {}
- for i = 1, LASTTOP_CNT do
- local uuid = rank2uuid and rank2uuid[i]
- local playerData = uuid and getPlayerData(uuid)
- if not playerData then break end
-
- commonDB.lastUuid2Rank[uuid] = i
- commonDB.lastTopList[i] = playerData.rolebase
- if uuid2beMobaiCnt and uuid2beMobaiCnt[uuid] then
- playerData.rolebase.beMobaiCnt = uuid2beMobaiCnt[uuid]
- end
- end
- ]]
- JjcLadderLogic.saveCommonDB(commonDB)
- LuaMongo.remove(DB.db_jjcLadder)
- LuaMongo.remove(DB.db_jjcLadder_record)
- end
- -- 获取名次 0表示未上榜
- function getRank(uuid)
- local commonDB = JjcLadderLogic.getCommonDB()
- if not commonDB.uuid2rank then
- return 0
- end
- return commonDB.uuid2rank[uuid] or 0
- end
- function getLastRank(uuid)
- local commonDB = JjcLadderLogic.getCommonDB()
- if not commonDB.lastUuid2Rank then
- return 0
- end
- return commonDB.lastUuid2Rank[uuid] or 0
- end
- -- 获取参赛者信息
- function getPlayerData(uuid, field)
- if not uuid then return end
- QueryByUuid._id = uuid
- LuaMongo.find(DB.db_jjcLadder, QueryByUuid, field)
- local playerData = {}
- return LuaMongo.next(playerData) and playerData
- end
- -- 保存/更新参赛者信息
- function updatePlayerData(playerData)
- local oldData = getPlayerData(playerData._id)
- if not oldData then
- -- 首次收到,插入数据
- local commonDB = JjcLadderLogic.getCommonDB()
- commonDB.rank2uuid = commonDB.rank2uuid or {}
- commonDB.uuid2rank = commonDB.uuid2rank or {}
- local rank = #commonDB.rank2uuid + 1
- commonDB.rank2uuid[rank] = playerData._id
- commonDB.uuid2rank[playerData._id] = rank
- JjcLadderLogic.saveCommonDB(commonDB)
- LuaMongo.insert(DB.db_jjcLadder, playerData)
- else
- -- 非首次,更新数据
- QueryByUuid._id = playerData._id
- LuaMongo.update(DB.db_jjcLadder, QueryByUuid, playerData)
- end
- end
- -- 排序比较函数
- local function cmpRank(a, b)
- if a.zhandouli ~= b.zhandouli then
- return a.zhandouli > b.zhandouli
- end
- return a.lv > b.lv
- end
- -- 按照战力重新排序
- function sortRank()
- local commonDB = JjcLadderLogic.getCommonDB()
- commonDB.rank2uuid = {}
- commonDB.uuid2rank = {}
- local list = {}
- LuaMongo.find(DB.db_jjcLadder, nil, FieldSort)
- while true do
- local playerData = {}
- if not LuaMongo.next(playerData) then
- break
- end
- list[#list + 1] = playerData.rolebase
- end
- if #list > 1 then
- table.sort(list, cmpRank)
- end
- for rank = 1, #list do
- local uuid = list[rank].uuid
- commonDB.rank2uuid[rank] = uuid
- commonDB.uuid2rank[uuid] = rank
- end
- JjcLadderLogic.saveCommonDB(commonDB)
- end
- -- 获取可膜拜的人数
- function getMobaiCnt()
- local commonDB = JjcLadderLogic.getCommonDB()
- if not commonDB.lastTopList then
- return 0
- end
- return math.min(#commonDB.lastTopList, JjcLadderLogic.MOBAI_PLAYER_CNT)
- end
- -- 是否有新纪录
- function hasLogRed(uuid)
- local commonDB = JjcLadderLogic.getCommonDB()
- if not commonDB.logReds then
- return
- end
- return commonDB.logReds[uuid]
- end
- -- 刷新纪录红点
- function setLogRed(commonDB, uuid, flag)
- if not commonDB.logReds then
- commonDB.logReds = {}
- end
- if commonDB.logReds[uuid] == flag then
- return
- end
- if flag == false then
- if commonDB.logReds[uuid] then
- commonDB.logReds[uuid] = nil
- end
- else
- commonDB.logReds[uuid] = flag
- end
-
- return true
- end
- function getCombatInfo(videoUuid, field)
- if not videoUuid then return end
- QueryByUuid._id = videoUuid
- LuaMongo.find(DB.db_jjcLadder_record, QueryByUuid, field)
- local combatInfo = {}
- return LuaMongo.next(combatInfo) and combatInfo
- end
- --
- function delLog(videoUuid)
- local combatInfo = getCombatInfo(videoUuid, FieldLogDel)
- if not combatInfo then return end
- combatInfo.cnt = combatInfo.cnt - 1
- if combatInfo.cnt < 1 then
- QueryByUuid._id = videoUuid
- LuaMongo.remove(DB.db_jjcLadder_record, QueryByUuid)
- else
- QueryByUuid._id = videoUuid
- DBUpdateField["$set"] = combatInfo
- LuaMongo.update(DB.db_jjcLadder_record, QueryByUuid, combatInfo)
- end
- end
- -- 添加记录
- function addLog(commonDB, combatInfo, uuid, targetUuid)
- combatInfo.cnt = 2
- LuaMongo.insert(DB.db_jjcLadder_record, combatInfo)
- commonDB.uuid2logs = commonDB.uuid2logs or {}
- commonDB.uuid2logs[uuid] = commonDB.uuid2logs[uuid] or {}
- commonDB.uuid2logs[targetUuid] = commonDB.uuid2logs[targetUuid] or {}
- local logs = commonDB.uuid2logs[uuid]
- local targetLogs = commonDB.uuid2logs[targetUuid]
- table.insert(logs, 1, combatInfo._id)
- table.insert(targetLogs, 1, combatInfo._id)
- for i = LOG_MAX_CNT + 1, #logs do
- delLog(logs[i])
- logs[i] = nil
- end
- for i = LOG_MAX_CNT + 1, #targetLogs do
- delLog(targetLogs[i])
- targetLogs[i] = nil
- end
- end
- -- 随机对手
- local TEMP_RANDOM_LIST = {}
- local function randomRank(minRank, maxRank, noRanks)
- local commonDB = JjcLadderLogic.getCommonDB()
- local cnt = 0
- for rank = minRank, maxRank do
- if (not noRanks[rank]) and
- commonDB.rank2uuid[rank] then
- cnt = cnt + 1
- TEMP_RANDOM_LIST[cnt] = rank
- end
- end
- if cnt < 1 then return end
- local r = math.random(1, cnt)
- local rank = TEMP_RANDOM_LIST[r]
- local uuid = commonDB.rank2uuid[rank]
- return rank, uuid
- end
- -- 根据名次随机x个对手
- local function randomTargetList(myRank)
- local targetList = {}
- if myRank < 1 then -- 没有参加资格,固定显示前5名
- local commonDB = JjcLadderLogic.getCommonDB()
- if not commonDB or not commonDB.rank2uuid then
- return targetList
- end
- for i = 1, RANDOM_TARGET_CNT do
- local uuid = commonDB.rank2uuid[i]
- local playerData = getPlayerData(uuid)
- local rolebase = playerData and playerData.rolebase
- if rolebase then
- rolebase.rank = i
- local list = {}
- list.roleBase = Util.copyTable(rolebase)
- list.objList = Util.copyTable(playerData.objList)
- targetList[#targetList + 1] = list
- end
- end
- return targetList
- end
- -- a.自身排名1000≤A,则每次从排名[A-100,A-50]的库中随机抽取5个,排名顺序展示在界面上
- -- b.自身排名200≤A<1000,则每次从排名[A-80,A-30]的库中随机抽取5个,排名顺序展示在界面上
- -- c.自身排名100<A<200,则每次从排名[A-30,A-10]的库中随机抽取5个,排名顺序展示在界面上
- -- d.自身排名20<A≤99,则每次从排名[A-15,A-5]的库中随机抽取5个,排名顺序展示在界面上
- -- e.自身排名6≤A≤20,则从3~20名中随机取
- -- f.自身排名A≤6,则从1~6名中随机取
- local minRank, maxRank
- if myRank >= 1000 then
- minRank = myRank - 100
- maxRank = myRank - 50
- elseif myRank >= 200 then
- minRank = myRank - 80
- maxRank = myRank - 30
- elseif myRank > 100 then
- minRank = myRank - 30
- maxRank = myRank - 10
- elseif myRank >= 20 then
- minRank = myRank - 15
- maxRank = myRank - 5
- elseif myRank > 6 then
- minRank = 3
- maxRank = 20
- else
- minRank = 1
- maxRank = 6
- end
- local noRanks = {}
- noRanks[myRank] = true
- for i = 1, RANDOM_TARGET_CNT do
- local rank, uuid = randomRank(minRank, maxRank, noRanks)
- if rank and uuid then
- local playerData = getPlayerData(uuid)
- noRanks[rank] = true
- local rolebase = playerData and playerData.rolebase
- if rolebase then
- rolebase.rank = rank
- local list = {}
- list.roleBase = Util.copyTable(rolebase)
- list.objList = Util.copyTable(playerData.objList)
- targetList[#targetList + 1] = list
- end
- end
- end
- return targetList
- end
- -------------------------------------- middle -------------------------------------------
- -- 主界面查询
- function LW_JJC_LADDER_QUERY(fd, uuid)
- local playerData = getPlayerData(uuid)
- local myRank = getRank(uuid)
- local msgInner = InnerMsg.wl.WL_JJC_LADDER_QUERY
- msgInner.uuid = uuid
- -- 随机对手
- msgInner.targetList = randomTargetList(myRank)
- msgInner.mobaiCnt = getMobaiCnt()
- msgInner.logRed = hasLogRed(uuid) and 1 or 0
- msgInner.myRank = myRank
- InnerMsg.sendMsg(fd, msgInner)
- end
- -- 数据同步
- function LW_JJC_LADDER_SENDDATA(fd, player)
- updatePlayerData(player)
- end
- -- 膜拜信息
- function LW_JJC_LADDER_MOBAI_QUERY(fd, uuid)
- local commonDB = JjcLadderLogic.getCommonDB()
- local msgInner = InnerMsg.wl.WL_JJC_LADDER_MOBAI_QUERY
- msgInner.uuid = uuid
- msgInner.list = msgInner.list or {}
- Util.cleanTable(msgInner.list)
- for i = 1, JjcLadderLogic.MOBAI_PLAYER_CNT do
- local rolebase = commonDB.lastTopList and commonDB.lastTopList[i]
- if not rolebase then break end
- msgInner.list[i] = rolebase
- end
- InnerMsg.sendMsg(fd, msgInner)
- end
- -- 膜拜点赞
- function LW_JJC_LADDER_MOBAI(fd, uuid, rank)
- local commonDB = JjcLadderLogic.getCommonDB()
- local rolebase = commonDB.lastTopList and commonDB.lastTopList[rank]
- if not rolebase then
- return MiddleLogic.sendWLBroadcast(fd, uuid, Lang.JJC_LADDER_MOBAI_ERR_NONE)
- end
- rolebase.beMobaiCnt = (rolebase.beMobaiCnt or 0) + 1
- JjcLadderLogic.saveCommonDB(commonDB)
- local msgInner = InnerMsg.wl.WL_JJC_LADDER_MOBAI
- msgInner.uuid = uuid
- msgInner.rank = rank
- InnerMsg.sendMsg(fd, msgInner)
- LW_JJC_LADDER_MOBAI_QUERY(fd, uuid)
- -- LW_JJC_LADDER_QUERY(fd, uuid)
- -- 被膜拜的人同步次数
- local toFd = MiddleManager.getFDBySvrIndex(rolebase.svrIndex)
- if toFd then
- local msgInner2 = InnerMsg.wl.WL_JJC_LADDER_BEMOBAICNT
- msgInner2.uuid = rolebase.uuid
- msgInner2.beMobaiCnt = rolebase.beMobaiCnt
- InnerMsg.sendMsg(toFd, msgInner2)
- end
- end
- -- 查看名次
- function LW_JJC_LADDER_RANK(fd, uuid)
- local msgInner = InnerMsg.wl.WL_JJC_LADDER_RANK
- msgInner.uuid = uuid
- if JjcLadderLogic.getState() == JjcLadderLogic.STATE_ACT_START then
- local myRank = getRank(uuid)
- msgInner.isLast = 0
- msgInner.rank = myRank
- else
- msgInner.isLast = 1
- msgInner.rank = getLastRank(uuid)
- end
- InnerMsg.sendMsg(fd, msgInner)
- end
- local function makeBoardRankData(rankData, rolebase)
- rankData.roleBase = Util.copyTable(rolebase)
- rankData.uuid = rolebase.uuid
- rankData.value1 = rolebase.zhandouli or 0
- if rolebase.name and rolebase.svrName then
- rankData.roleBase.name = "[" .. rolebase.svrName .. "]" .. rolebase.name
- end
- end
- --
- function getBoard()
- local billboard = BillboardDB.db[BillboardDefine.TYPE_JJCLADDER_M]
- if not billboard then return end
- local nowTime = os.time()
- if billboard.lastSortTime == nowTime then
- return billboard
- end
- billboard.lastSortTime = nowTime
- local commonDB = JjcLadderLogic.getCommonDB()
- local rank2uuid = commonDB.rank2uuid
- Util.cleanTable(billboard.uuid2rank)
- Util.cleanTable(billboard.rank2data)
- if JjcLadderLogic.getState() == JjcLadderLogic.STATE_ACT_START then
- if rank2uuid then
- for rank, uuid in ipairs(rank2uuid) do
- billboard.uuid2rank[uuid] = rank
- local playerData = getPlayerData(uuid)
- if not playerData then break end
- local rankData = BillboardDB.initRankData()
- billboard.rank2data[rank] = rankData
- makeBoardRankData(rankData, playerData.rolebase)
- end
- end
- else
- local lastTopListLen = commonDB.lastTopList and #commonDB.lastTopList or 0
- for rank = 1, lastTopListLen do
- local rolebase = commonDB.lastTopList[rank]
- if not rolebase then break end
- billboard.uuid2rank[rolebase.uuid] = rank
- local rankData = BillboardDB.initRankData()
- billboard.rank2data[rank] = rankData
- makeBoardRankData(rankData, rolebase)
- end
- end
- return billboard
- end
- -- 排行榜
- function LW_JJC_LADDER_BOARD(fd, uuid)
- local commonDB = JjcLadderLogic.getCommonDB()
- local rank2uuid = commonDB.rank2uuid
- local msgInner = InnerMsg.wl.WL_JJC_LADDER_BOARD
- msgInner.uuid = uuid
- msgInner.list = msgInner.list or {}
- Util.cleanTable(msgInner.list)
- if JjcLadderLogic.getState() == JjcLadderLogic.STATE_ACT_START then
- -- 活动开始,活动排行
- for i = 1, BOARD_MAX_CNT do
- local tuuid = rank2uuid and rank2uuid[i]
- local playerData = tuuid and getPlayerData(tuuid)
- if not playerData then break end
- msgInner.list[i] = playerData.rolebase
- end
- local myPlayerData = getPlayerData(uuid)
- msgInner.myData = myPlayerData and myPlayerData.rolebase or {}
- msgInner.myData.rank = getRank(uuid)
- msgInner.isLast = 0
- else
- -- 其它时候,上一期排行
- if commonDB.lastTopList then
- for i = 1, BOARD_MAX_CNT do
- local rolebase = commonDB.lastTopList[i]
- if not rolebase then break end
- msgInner.list[i] = rolebase
- if rolebase.uuid == uuid then
- msgInner.myData = rolebase
- msgInner.myData.rank = i
- end
- end
- else
- msgInner.myData = {}
- msgInner.myData.rank = 0
- end
- msgInner.isLast = 1
- end
- InnerMsg.sendMsg(fd, msgInner)
- end
- -- 战斗请求
- function LW_JJC_LADDER_COMBAT_ASK(fd, uuid, targetUuid, targetRank)
- -- 活动结束就拜拜
- if JjcLadderLogic.getState() ~= JjcLadderLogic.STATE_ACT_START then
- return MiddleLogic.sendWLBroadcast(fd, uuid, Lang.JJC_LADDER_ERR_TIME)
- end
- if not getPlayerData(uuid) then
- return MiddleLogic.sendWLBroadcast(fd, uuid, Lang.JJC_LADDER_ERR_JOIN)
- end
- local targetPlayerData = getPlayerData(targetUuid)
- if not targetPlayerData then
- return LW_JJC_LADDER_QUERY(fd, uuid)
- end
- if getRank(targetUuid) ~= targetRank then
- return LW_JJC_LADDER_QUERY(fd, uuid)
- end
- local msgInner = InnerMsg.wl.WL_JJC_LADDER_COMBAT_ASK
- msgInner.uuid = uuid
- msgInner.rank = getRank(uuid)
- msgInner.targetUuid = targetUuid
- msgInner.targetRank = targetRank
- msgInner.playerData = targetPlayerData
- InnerMsg.sendMsg(fd, msgInner)
- end
- -- 战斗结果同步
- function LW_JJC_LADDER_COMBAT_RESULT(fd, uuid, rank, targetUuid, targetRank, combatInfo)
- local selfData = getPlayerData(uuid)
- if not selfData then
- return MiddleLogic.sendWLBroadcast(fd, uuid, Lang.JJC_LADDER_ERR_JOIN)
- end
- local targetPlayerData = getPlayerData(targetUuid)
- if not targetPlayerData then
- return LW_JJC_LADDER_QUERY(fd, uuid)
- end
- if getRank(uuid) ~= rank or getRank(targetUuid) ~= targetRank then
- return LW_JJC_LADDER_QUERY(fd, uuid)
- end
- -- 结果处理
- local commonDB = JjcLadderLogic.getCommonDB()
- local newRank, newTargetRank = rank, targetRank
- if combatInfo.isActEnd then
- else
- if combatInfo.isWin and (rank > targetRank) then
- -- 胜利可以提升名次
- commonDB.uuid2rank[uuid] = targetRank
- commonDB.uuid2rank[targetUuid] = rank
- commonDB.rank2uuid[rank] = targetUuid
- commonDB.rank2uuid[targetRank] = uuid
- newRank, newTargetRank = targetRank, rank
- end
- end
-
- if combatInfo.isWin then
- setLogRed(commonDB, targetUuid, true)
- end
- combatInfo.jjcLadder = {}
- combatInfo.jjcLadder.rank = rank
- combatInfo.jjcLadder.targetRank = targetRank
- combatInfo.jjcLadder.newRank = newRank
- combatInfo.jjcLadder.newTargetRank = newTargetRank
- addLog(commonDB, combatInfo, uuid, targetUuid)
- JjcLadderLogic.saveCommonDB(commonDB)
- local msgInner = InnerMsg.wl.WL_JJC_LADDER_COMBAT_RESULT
- msgInner.uuid = uuid
- msgInner.rank = rank
- msgInner.targetUuid = targetUuid
- msgInner.targetRank = targetRank
- InnerMsg.sendMsg(fd, msgInner)
- end
- local function getLogContent(combatInfo, seeuuid)
- local jjcLadder = combatInfo.jjcLadder
- if combatInfo.defender.uuid == seeuuid then
- -- 防守方观看
- if combatInfo.isWin then
- if jjcLadder.targetRank ~= jjcLadder.newTargetRank then
- return Util.format(Lang.JJC_LADDER_LOG4, combatInfo.attacker.name, jjcLadder.targetRank, jjcLadder.newTargetRank)
- else
- return Util.format(Lang.JJC_LADDER_LOG5, combatInfo.attacker.name)
- end
- else
- return Util.format(Lang.JJC_LADDER_LOG6, combatInfo.attacker.name)
- end
- else
- -- 攻击方观看/其它情况
- if combatInfo.isWin then
- if jjcLadder.rank ~= jjcLadder.newRank then
- return Util.format(Lang.JJC_LADDER_LOG1, combatInfo.defender.name, jjcLadder.rank, jjcLadder.newRank)
- else
- return Util.format(Lang.JJC_LADDER_LOG2, combatInfo.defender.name)
- end
- else
- return Util.format(Lang.JJC_LADDER_LOG3, combatInfo.defender.name)
- end
- end
- end
- local function fontLadderLog(net, combatInfo, seeuuid)
- net.time = combatInfo.time
- net.isWin = combatInfo.isWin
- local jjcLadder = combatInfo.jjcLadder
- net.attacker = Util.copyTable(combatInfo.attacker)
- net.defender = Util.copyTable(combatInfo.defender)
- net.atkRank = combatInfo.jjcLadder.rank
- net.defRank = combatInfo.jjcLadder.targetRank
- -- net.jjcLadder = Util.copyTable(combatInfo.jjcLadder)
- end
- local function sortGodLog(a, b)
- return a[2] > b[2]
- end
- function getGodFightLog(msgInner, commonDB)
- local logList ={}
- local haveList = {}
- local cnt = 0
- for rank, uuid in ipairs(commonDB.rank2uuid) do
- if rank > 20 then break end
- local logs = commonDB.uuid2logs and commonDB.uuid2logs[uuid]
- local logsLen = logs and #logs or 0
- logsLen = logsLen < 10 and logsLen or 10
- for i = 1, logsLen do
- local videoUuid = logs[i]
- if not haveList[videoUuid] then
- local combatInfo = getCombatInfo(videoUuid, FieldCombatLog)
- if combatInfo.jjcLadder and (combatInfo.jjcLadder.rank <= 20 or combatInfo.jjcLadder.targetRank <= 20 ) then
- cnt = cnt + 1
- logList[cnt] = {}
- logList[cnt][1] =videoUuid
- logList[cnt][2] = combatInfo.time
- haveList[videoUuid] = combatInfo.time
- end
- end
- end
- end
- if #logList > 0 then
- table.sort( logList, sortGodLog )
- for i = 1, 10 do
- if logList[i] and logList[i][1] then
- local combatInfo = getCombatInfo(logList[i][1], FieldCombatLog)
- local log = {}
- fontLadderLog(log, combatInfo)
- log.videoUuid = logList[i][1]
- msgInner.godLogs[#msgInner.godLogs + 1] = log
- end
-
- end
- end
- end
- -- 对战日志
- function LW_JJC_LADDER_LOG(fd, uuid)
- local commonDB = JjcLadderLogic.getCommonDB()
- local logs = commonDB.uuid2logs and commonDB.uuid2logs[uuid]
- local logsLen = logs and #logs or 0
- local msgInner = InnerMsg.wl.WL_JJC_LADDER_LOG
- msgInner.uuid = uuid
- msgInner.logs = msgInner.logs or {}
- msgInner.godLogs = msgInner.godLogs or {}
- Util.cleanTable(msgInner.logs)
- Util.cleanTable(msgInner.godLogs)
- for i = 1, logsLen do
- local videoUuid = logs[i]
- local combatInfo = getCombatInfo(videoUuid, FieldCombatLog)
- if combatInfo then
- local log = {}
- fontLadderLog(log, combatInfo, uuid)
- log.videoUuid = videoUuid
- msgInner.logs[#msgInner.logs + 1] = log
- end
- end
- getGodFightLog(msgInner, commonDB)
- InnerMsg.sendMsg(fd, msgInner)
- setLogRed(commonDB, uuid, false)
- end
- -- 战斗回放
- function LW_JJC_LADDER_REPEAT_VIDEO(fd, uuid, videoUuid)
- local combatInfo = getCombatInfo(videoUuid)
- local msgInner = InnerMsg.wl.WL_JJC_LADDER_REPEAT_VIDEO
- msgInner.uuid = uuid
- msgInner.combatInfo = combatInfo or {}
- InnerMsg.sendMsg(fd, msgInner)
- end
- -- 同步可膜拜人数
- function sendWLMobaiCnt(fd)
- local msgInner = InnerMsg.wl.WL_JJC_LADDER_MOBAI_CNT
- msgInner.mobaiCnt = getMobaiCnt()
- InnerMsg.sendMsg(fd, msgInner)
- end
- ------------------------------------- 活动状态变化 ------------------------------------------
- function onActReady()
- -- 活动准备开始 把上期前三 称号去除
- local commonDB = JjcLadderLogic.getCommonDB()
- print(" onActReady middle !!! go top chenghao del ")
- if commonDB.lastTopList then
- local svrList = {}
- local msgInner = InnerMsg.wl.WL_JJC_LADDER_CHENGHAO_DEL
- msgInner.list = msgInner.list or {}
- Util.cleanTable(msgInner.list)
- for i = 1, 3 do
- local rolebase = commonDB.lastTopList[i]
- if not rolebase then break end
- msgInner.list[rolebase.uuid] = {}
- msgInner.list[rolebase.uuid].svrIndex = rolebase.svrIndex
- msgInner.list[rolebase.uuid].rank = i
- svrList[rolebase.svrIndex] = 1
- end
- for svrIndex in pairs(svrList) do
- local toFd = MiddleManager.getFDBySvrIndex(svrIndex)
- InnerMsg.sendMsg(toFd, msgInner)
- end
- end
- end
- function onActStart()
- -- 活动开始,按照战力排序
- sortRank()
- end
- function onActEnd()
- -- 告知各个服结果
- local commonDB = JjcLadderLogic.getCommonDB()
- local svrIndex2ranks = {}
- if commonDB.rank2uuid then
- for rank, uuid in ipairs(commonDB.rank2uuid) do
- local playerData = getPlayerData(uuid, FieldSort)
- local svrIndex = playerData and playerData.rolebase and playerData.rolebase.svrIndex
- -- 日志
- --Log.write(Log.LOGID_DEBUG, "jjcLadder", rank, uuid, svrIndex)
- -- 按照服对结果进行分组,返还本服
- local lastSvrIndex = svrIndex and MiddleManager.getLastSvrIndex(svrIndex)
- if lastSvrIndex then
- svrIndex2ranks[lastSvrIndex] = svrIndex2ranks[lastSvrIndex] or {}
- svrIndex2ranks[lastSvrIndex][rank] = uuid
- end
- end
- end
- local msgResult = InnerMsg.wl.WL_JJC_LADDER_FINAL_RESULT
- local uuid2beMobaiCnt = {}
- local lastTopCnt = commonDB.lastTopList and #commonDB.lastTopList or 0
- for i = 1, lastTopCnt do
- local rolebase = commonDB.lastTopList[i]
- uuid2beMobaiCnt[rolebase.uuid] = rolebase.beMobaiCnt
- end
- -- 保存前3
- saveTop(uuid2beMobaiCnt)
- -- 同步结果
- for svrIndex, fd in pairs(MiddleManager.SVRINDEX_2_FD) do
- -- 排名结果
- msgResult.list = svrIndex2ranks[svrIndex] or {}
- InnerMsg.sendMsg(fd, msgResult)
- sendWLMobaiCnt(fd)
- end
- end
- function resetDbActEnd()
- -- 重置数据
- resetDB()
- end
|