From 2c744690bc867b01d9aab6b3fb0eb0c64f94969c Mon Sep 17 00:00:00 2001 From: zhangqiang <657634622@qq.com> Date: Thu, 16 Jul 2020 10:13:32 +0800 Subject: [PATCH] =?UTF-8?q?=E8=B5=9B=E7=A8=8B=E6=95=B0=E6=8D=AE=E5=90=88?= =?UTF-8?q?=E5=B9=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ArenaTopMatch/ArenaTopMatchManager.lua | 168 ++++++++++++------ 1 file changed, 114 insertions(+), 54 deletions(-) diff --git a/Assets/ManagedResources/~Lua/Modules/ArenaTopMatch/ArenaTopMatchManager.lua b/Assets/ManagedResources/~Lua/Modules/ArenaTopMatch/ArenaTopMatchManager.lua index d3f0691683..18b526ae00 100644 --- a/Assets/ManagedResources/~Lua/Modules/ArenaTopMatch/ArenaTopMatchManager.lua +++ b/Assets/ManagedResources/~Lua/Modules/ArenaTopMatch/ArenaTopMatchManager.lua @@ -409,11 +409,16 @@ function this.Request_32_EliminationData(func) if this.baseInfo.battleStage ~= TOP_MATCH_STAGE.ELIMINATION and this.baseInfo.battleStage~= TOP_MATCH_STAGE.OVER then return end NetManager.GetTopMatchEliminationInfo(1, function(msg) - this.EliminationData_32 = msg.championBattlePairInfo - -- Log("获取32强数据成功, 数据长度 = "..#this.EliminationData_32) + -- LogRed("获取32强数据成功, 数据长度 = "..#msg.championBattlePairInfo) + -- for i = 1, #msg.championBattlePairInfo do + -- LogPink("roundTImes "..msg.championBattlePairInfo[i].roundTImes.." .teamId "..msg.championBattlePairInfo[i].teamId.." .position ".. msg.championBattlePairInfo[i].position) + -- end + this.EliminationData_32 = this.RequestEliminationDataMerge(msg.championBattlePairInfo) + -- this.EliminationData_32 = msg.championBattlePairInfo if func then func() end end) end + --- 请求淘汰赛数据(4强) function this.Request_4_EliminationData(func) -- 未开启 @@ -422,12 +427,66 @@ function this.Request_4_EliminationData(func) if this.baseInfo.battleStage ~= TOP_MATCH_STAGE.ELIMINATION and this.baseInfo.battleStage~= TOP_MATCH_STAGE.OVER then return end NetManager.GetTopMatchEliminationInfo(2, function(msg) - this.EliminationData_4 = msg.championBattlePairInfo + -- this.EliminationData_4 = msg.championBattlePairInfo + this.EliminationData_4 = this.RequestEliminationDataMerge(msg.championBattlePairInfo) -- Log("获取4强数据成功, 数据长度 = "..#this.EliminationData_4) if func then func() end end) end - +--32 16 8 4 强数据合并 +--三局两胜 需要将三局 或者两局数据 合并 算出战斗结果 胜利 失败 未打 和 竞猜结果 只要有过1就等于1 +function this.RequestEliminationDataMerge(EliminationData) + local newEliminationData = {} + for EliminationDataI, EliminationDataV in ipairs(EliminationData) do + local curKey = tonumber(tostring(EliminationDataV.roundTImes)..tostring(EliminationDataV.teamId)..tostring(EliminationDataV.position)) + if newEliminationData[curKey] then + table.insert(newEliminationData[curKey],EliminationDataV) + else + newEliminationData[curKey] = {} + table.insert(newEliminationData[curKey],EliminationDataV) + end + end + -- LogRed("newEliminationData, 数据长度 = "..LengthOfTable(newEliminationData)) + local datas = {} + for newEliminationDataI, newEliminationDataV in pairs(newEliminationData) do + -- LogPink("newEliminationDataI "..newEliminationDataI) + if newEliminationDataV and #newEliminationDataV > 0 then + local singledata = newEliminationDataV[1] + local fightResult = 0 + for i = 1, #newEliminationDataV do + fightResult = fightResult + newEliminationDataV[i].fightResult + if fightResult < 0 then + singledata.fightResult = -1 + elseif fightResult == 0 then + singledata.fightResult = 0 + elseif fightResult > 0 and fightResult < 2 then + singledata.fightResult = 1 + elseif fightResult >= 2 then + singledata.fightResult = 1 + end + if newEliminationDataV[i].isGUess > 0 then + singledata.isGUess = newEliminationDataV[i].isGUess + end + end + -- LogPink("fightResult "..singledata.fightResult) + -- LogPink("isGUess "..singledata.isGUess) + -- newEliminationData_32V = singledata + table.insert(datas,singledata) + end + end + table.sort(datas, function(a, b) + if a.roundTImes == b.roundTImes then + if a.teamId == b.teamId then + return a.position < b.position + else + return a.teamId < b.teamId + end + else + return a.roundTImes < b.roundTImes + end + end) + return datas +end --- 获取32强数据 function this.Get_32_EliminationData() -- body @@ -557,67 +616,68 @@ function this.GetRankNameByRank(rank) local curStage = this.baseInfo.battleStage local curTurn = this.baseInfo.battleTurn local curState = this.baseInfo.battleState + LogPink("rank "..rank.." curStage "..curStage.." curTurn "..curTurn.." curState "..curState) --- 未获取到数据 if curStage == -1 or curTurn == -1 or curState == -1 then return Language[10041] end --- 选拔赛阶段都是相应得强数 - if curStage == 1 then - local config = ConfigManager.GetConfigData(ConfigName.ChampionshipSetting, 1) - return config.ChampionshipPlayer..Language[10097] - -- 判断淘汰赛阶段的轮数 - elseif curStage == 2 or curStage == -2 then - -- if curState == TOP_MATCH_TIME_STATE.OPEN_IN_END or curState == TOP_MATCH_TIME_STATE.OVER then - if rank == 1 then - return Language[10095]--冠军 - elseif rank == 2 then - return Language[10096]--亚军 - end - return rank..Language[10097]--几强 - elseif curStage == -1 then - return Language[10041] - end - -- --- 判断淘汰赛阶段的轮数 - -- local maxTurn = this.GetEliminationMaxRound() - -- LogPink("maxTurn "..maxTurn) - -- if curTurn <= 0 then curTurn = maxTurn end - -- local opTurn = maxTurn - curTurn + 1 --- 将服务器发过来的轮数倒序,方便计算 - -- --- 如果是结算状态,按下一轮处理 - -- LogPink("opTurn "..opTurn) - -- if curState == TOP_MATCH_TIME_STATE.OPEN_IN_END or curState == TOP_MATCH_TIME_STATE.OVER then - -- opTurn = opTurn - 1 - -- end - -- LogPink("opTurn "..opTurn) - -- --- 轮数为0表示决赛的结算阶段 - -- if opTurn == 0 then + -- if curStage == 1 then + -- local config = ConfigManager.GetConfigData(ConfigName.ChampionshipSetting, 1) + -- return config.ChampionshipPlayer..Language[10097] + -- -- 判断淘汰赛阶段的轮数 + -- elseif curStage == 2 or curStage == -2 then + -- -- if curState == TOP_MATCH_TIME_STATE.OPEN_IN_END or curState == TOP_MATCH_TIME_STATE.OVER then -- if rank == 1 then -- return Language[10095]--冠军 -- elseif rank == 2 then -- return Language[10096]--亚军 -- end + -- return rank..Language[10097]--几强 + -- elseif curStage == -1 then + -- return Language[10041] -- end - -- --- 如果大于淘汰赛最大轮数的最大名次 - -- if rank > math.pow(2, maxTurn) then - -- local config = ConfigManager.GetConfigData(ConfigName.ChampionshipSetting, 1) - -- LogPink(config.ChampionshipPlayer..Language[10097]) - -- return config.ChampionshipPlayer..Language[10097]--几强 - -- end - -- --- 如果小于当前轮数的最大排名,则返回当前轮数的名称 - -- local opTurnMaxRank = math.pow(2, opTurn) - -- if rank <= opTurnMaxRank then - -- LogPink(opTurnMaxRank..Language[10097]) - -- return opTurnMaxRank..Language[10097] - -- end - -- --- 如果大于当前的轮数,则可能已被淘汰,返回相应的被淘汰轮数的名称 - -- for turn = opTurn + 1, maxTurn do - -- local turnMaxRank = math.pow(2, turn) - -- if rank <= turnMaxRank then - -- LogPink(turnMaxRank..Language[10097]) - -- return turnMaxRank..Language[10097] - -- end - -- end - -- -- 数据没错的情况下不会出现这种情况 - -- return Language[10041] + --- 判断淘汰赛阶段的轮数 + local maxTurn = this.GetEliminationMaxRound() + LogPink("maxTurn "..maxTurn) + if curTurn <= 0 then curTurn = maxTurn end + local opTurn = maxTurn - curTurn + 1 --- 将服务器发过来的轮数倒序,方便计算 + --- 如果是结算状态,按下一轮处理 + LogPink("opTurn "..opTurn) + if curState == TOP_MATCH_TIME_STATE.OPEN_IN_END or curState == TOP_MATCH_TIME_STATE.OVER then + opTurn = opTurn - 1 + end + LogPink("opTurn "..opTurn) + --- 轮数为0表示决赛的结算阶段 + if opTurn == 0 then + if rank == 1 then + return Language[10095]--冠军 + elseif rank == 2 then + return Language[10096]--亚军 + end + end + --- 如果大于淘汰赛最大轮数的最大名次 + if rank > math.pow(2, maxTurn) then + local config = ConfigManager.GetConfigData(ConfigName.ChampionshipSetting, 1) + LogPink(config.ChampionshipPlayer..Language[10097]) + return config.ChampionshipPlayer..Language[10097]--几强 + end + --- 如果小于当前轮数的最大排名,则返回当前轮数的名称 + local opTurnMaxRank = math.pow(2, opTurn) + if rank <= opTurnMaxRank then + LogPink(opTurnMaxRank..Language[10097]) + return opTurnMaxRank..Language[10097] + end + --- 如果大于当前的轮数,则可能已被淘汰,返回相应的被淘汰轮数的名称 + for turn = opTurn + 1, maxTurn do + local turnMaxRank = math.pow(2, turn) + if rank <= turnMaxRank then + LogPink(turnMaxRank..Language[10097]) + return turnMaxRank..Language[10097] + end + end + -- 数据没错的情况下不会出现这种情况 + return Language[10041] end -- 竞猜币ID