485 lines
15 KiB
Lua
485 lines
15 KiB
Lua
------------------------------------------------
|
|
--作者: 王圣
|
|
--日期: 2021-07-15
|
|
--文件: LoversTopData.lua
|
|
--模块: LoversTopData
|
|
--描述: 仙侣冠军赛数据
|
|
------------------------------------------------
|
|
|
|
local L_TeamInfo = require "Logic.LoversFight.LoversTeamInfo"
|
|
local LoversTopData = {
|
|
Type = 0,
|
|
--第几轮
|
|
Round = 0,
|
|
GroupDic = Dictionary:New(),
|
|
--竞猜数据
|
|
GuessInfo = nil,
|
|
TimeDic = nil,
|
|
--当前竞猜列表
|
|
GuessList = List:New(),
|
|
--地榜参加时间
|
|
L_JoinTime = nil,
|
|
--天榜参加时间
|
|
H_JoinTime = nil,
|
|
H_IsMsgTishi = true,
|
|
H_IsReceiveJinJi = false,
|
|
H_MsgBoxActive = false,
|
|
H_TimeDic = nil,
|
|
H_IsTickTiShi = true,
|
|
--地榜
|
|
L_IsMsgTishi = true,
|
|
L_IsReceiveJinJi = false,
|
|
L_MsgBoxActive = false,
|
|
L_TimeDic = nil,
|
|
L_IsTickTiShi = true,
|
|
}
|
|
|
|
function LoversTopData:New()
|
|
local _m = Utils.DeepCopy(self)
|
|
return _m
|
|
end
|
|
|
|
function LoversTopData:ParseMsg(msg)
|
|
if msg == nil then
|
|
return
|
|
end
|
|
self.GroupDic:Clear()
|
|
self.Type = msg.type
|
|
self.Round = msg.round
|
|
Debug.LogError("ttttttttttttttttttt----::"..msg.type)
|
|
Debug.LogError("rrrrrrrrrrrrrrrrrrr----::"..msg.round)
|
|
Debug.LogError("lllllllllllllllllll----::"..#msg.rounds.groups)
|
|
if msg.rounds.groups ~= nil then
|
|
for i = 1, #msg.rounds.groups do
|
|
local _groupMsg = msg.rounds.groups[i]
|
|
local _id = _groupMsg.id
|
|
local _teamList = List:New()
|
|
if _groupMsg.t1 ~= nil then
|
|
local _team1 = L_TeamInfo:New()
|
|
local _team_1 = _groupMsg.t1.team
|
|
_team1:ParseTeam(_team_1)
|
|
_teamList:Add({State = _groupMsg.t1.type, Team = _team1})
|
|
end
|
|
if _groupMsg.t2 ~= nil then
|
|
local _team2 = L_TeamInfo:New()
|
|
local _team_2 = _groupMsg.t2.team
|
|
_team2:ParseTeam(_team_2)
|
|
_teamList:Add({State = _groupMsg.t2.type, Team = _team2})
|
|
end
|
|
self.GroupDic:Add(_id, _teamList)
|
|
end
|
|
end
|
|
end
|
|
|
|
function LoversTopData:ParseGuessMsg(msg)
|
|
if msg == nil then
|
|
return
|
|
end
|
|
if msg.guess ~= nil then
|
|
self.GuessInfo = {FightId = msg.guess.fightId, G1 = msg.guess.g1, G2 = msg.guess.g2 }
|
|
for i = 1, #self.GuessList do
|
|
local _guess = self.GuessList[i]
|
|
if _guess.FightId == msg.guess.fightId then
|
|
_guess.G1 = msg.guess.g1
|
|
_guess.G2 = msg.guess.g2
|
|
break
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
function LoversTopData:ParseGuessListMsg(msg, type)
|
|
if msg == nil then
|
|
return
|
|
end
|
|
self.GuessList:Clear()
|
|
if msg ~= nil then
|
|
for i = 1, #msg do
|
|
local _data = {FightId = msg[i].fightId, G1 = msg[i].g1, G2 = msg[i].g2, Type = type}
|
|
self.GuessList:Add(_data)
|
|
end
|
|
end
|
|
end
|
|
|
|
function LoversTopData:GetGuessInfo(id)
|
|
local _ret = nil
|
|
for i = 1, #self.GuessList do
|
|
local _guess = self.GuessList[id]
|
|
if _guess ~= nil then
|
|
_ret = _guess
|
|
break
|
|
end
|
|
end
|
|
return _ret
|
|
end
|
|
|
|
function LoversTopData:GetRound_L(sec)
|
|
local _ret = -1
|
|
local _timeDic = self:GetTimeDicL()
|
|
local _keys = _timeDic:GetKeys()
|
|
if _keys ~= nil then
|
|
for i = 1, #_keys do
|
|
local _key = _keys[i]
|
|
local _time = _timeDic[_key]
|
|
if _time ~= nil then
|
|
if sec >= _time.PreStart * 60 and sec <= _time.End * 60 then
|
|
_ret = _key
|
|
break
|
|
end
|
|
end
|
|
end
|
|
end
|
|
return _ret
|
|
end
|
|
|
|
function LoversTopData:GetRound_H(sec)
|
|
local _ret = -1
|
|
local _timeDic = self:GetTimeDicH()
|
|
local _keys = _timeDic:GetKeys()
|
|
if _keys ~= nil then
|
|
for i = 1, #_keys do
|
|
local _key = _keys[i]
|
|
local _time = _timeDic[_key]
|
|
if _time ~= nil then
|
|
if sec >= _time.PreStart * 60 and sec <= _time.End * 60 then
|
|
_ret = _key
|
|
break
|
|
end
|
|
end
|
|
end
|
|
end
|
|
return _ret
|
|
end
|
|
|
|
function LoversTopData:IsCrossFinalRound_H(preSec, sec)
|
|
local _ret = false
|
|
local _timeDic = self:GetTimeDicH()
|
|
local _time = _timeDic[4]
|
|
if _time ~= nil then
|
|
if preSec <= _time.End * 60 and sec >= _time.End * 60 then
|
|
_ret = true
|
|
end
|
|
end
|
|
return _ret
|
|
end
|
|
|
|
function LoversTopData:IsCrossFinalRound_L(preSec, sec)
|
|
local _ret = false
|
|
local _timeDic = self:GetTimeDicL()
|
|
local _time = _timeDic[4]
|
|
if _time ~= nil then
|
|
if preSec <= _time.End * 60 and sec >= _time.End * 60 then
|
|
_ret = true
|
|
end
|
|
end
|
|
return _ret
|
|
end
|
|
|
|
function LoversTopData:IsCrossFinalRound_L()
|
|
end
|
|
|
|
function LoversTopData:GetRoundTime(round)
|
|
local _ret = nil
|
|
if self.Type == 1 then
|
|
_ret = self:GetRoundTime_H(round)
|
|
elseif self.Type == 2 then
|
|
_ret = self:GetRoundTime_L(round)
|
|
end
|
|
return _ret
|
|
end
|
|
|
|
function LoversTopData:GetRoundTime_L(round)
|
|
local _ret = nil
|
|
local _timeDic = self:GetTimeDicL()
|
|
_ret = _timeDic[round]
|
|
return _ret
|
|
end
|
|
|
|
function LoversTopData:GetRoundTime_H(round)
|
|
local _ret = nil
|
|
local _timeDic = self:GetTimeDicH()
|
|
_ret = _timeDic[round]
|
|
return _ret
|
|
end
|
|
|
|
--通过队伍id获取冠军赛队伍信息
|
|
function LoversTopData:GetTeamInfo(teamId)
|
|
local _ret = nil
|
|
local _keys = self.GroupDic:GetKeys()
|
|
if _keys ~= nil then
|
|
for i = 1, #_keys do
|
|
local _key = _keys[i]
|
|
local _teamList = self.GroupDic[_key]
|
|
if _teamList ~= nil then
|
|
for m = 1, #_teamList do
|
|
local _team = _teamList[m].Team
|
|
if _team.Id == teamId then
|
|
_ret = _team
|
|
break
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
return _ret
|
|
end
|
|
|
|
function LoversTopData:GetL_NextTime()
|
|
local _ret = {Time = 0, Round = 0}
|
|
local _curSec = GameCenter.HeartSystem.ServerZoneTime - GameCenter.LoversFightSystem.StartSec
|
|
local function _Func(key, value)
|
|
if value.Type == 3 then
|
|
local _list = Utils.SplitNumber(value.StartTime, '_')
|
|
local _time = _list[2]
|
|
if _time > _curSec / 60 then
|
|
_ret.Time = GameCenter.HeartSystem.ServerZoneTime + (_time * 60 - _curSec)
|
|
_ret.Round = value.Game
|
|
return true
|
|
end
|
|
end
|
|
end
|
|
DataConfig.DataMarryBattleTime:ForeachCanBreak(_Func)
|
|
return _ret
|
|
end
|
|
|
|
function LoversTopData:GetH_NextTime()
|
|
local _ret = {Time = 0, Round = 0}
|
|
local _curSec = GameCenter.HeartSystem.ServerZoneTime - GameCenter.LoversFightSystem.StartSec
|
|
local function _Func(key, value)
|
|
if value.Type == 4 then
|
|
local _list = Utils.SplitNumber(value.StartTime, '_')
|
|
local _time = _list[2]
|
|
if _time > _curSec / 60 then
|
|
_ret.Time = GameCenter.HeartSystem.ServerZoneTime + (_time * 60 - _curSec)
|
|
_ret.Round = value.Game
|
|
return true
|
|
end
|
|
end
|
|
end
|
|
DataConfig.DataMarryBattleTime:ForeachCanBreak(_Func)
|
|
return _ret
|
|
end
|
|
|
|
--获取地榜参加时间
|
|
function LoversTopData:GetJoinTimeL()
|
|
if self.L_JoinTime == nil then
|
|
local _cfg = DataConfig.DataGlobal[GlobalName.Marry_battle_time]
|
|
if _cfg ~= nil then
|
|
local _list = Utils.SplitStr(_cfg.Params, ';')
|
|
local _values = Utils.SplitNumber(_list[3], '_')
|
|
local _week = _values[1]
|
|
local _start = _values[2]
|
|
local _end = _values[3]
|
|
self.L_JoinTime = {Week = _week, Start = _start, End = _end}
|
|
end
|
|
end
|
|
return self.L_JoinTime
|
|
end
|
|
|
|
function LoversTopData:CanJoinL(week, startTime)
|
|
local _ret = false
|
|
local _joinTime = self:GetJoinTimeL()
|
|
if _joinTime ~= nil then
|
|
if week == _joinTime.Week then
|
|
local _curSec = GameCenter.HeartSystem.ServerZoneTime - startTime
|
|
if _curSec >= _joinTime.Start * 60 and _curSec <= _joinTime.End * 60 then
|
|
_ret = true
|
|
end
|
|
end
|
|
end
|
|
return _ret
|
|
end
|
|
|
|
function LoversTopData:IsOverL(week, startTime)
|
|
local _ret = false
|
|
local _joinTime = self:GetJoinTimeL()
|
|
if _joinTime ~= nil then
|
|
if week == _joinTime.Week then
|
|
local _curSec = GameCenter.HeartSystem.ServerZoneTime - startTime
|
|
if _curSec > _joinTime.End * 60 then
|
|
_ret = true
|
|
end
|
|
end
|
|
end
|
|
return _ret
|
|
end
|
|
|
|
--获取天榜参加时间
|
|
function LoversTopData:GetJoinTimeH()
|
|
if self.H_JoinTime == nil then
|
|
local _cfg = DataConfig.DataGlobal[GlobalName.Marry_battle_time]
|
|
if _cfg ~= nil then
|
|
local _list = Utils.SplitStr(_cfg.Params, ';')
|
|
local _values = Utils.SplitNumber(_list[4], '_')
|
|
local _week = _values[1]
|
|
local _start = _values[2]
|
|
local _end = _values[3]
|
|
self.H_JoinTime = {Week = _week, Start = _start, End = _end}
|
|
end
|
|
end
|
|
return self.H_JoinTime
|
|
end
|
|
|
|
function LoversTopData:CanJoinH(week, startTime)
|
|
local _ret = false
|
|
local _joinTime = self:GetJoinTimeH()
|
|
if _joinTime ~= nil then
|
|
if week == _joinTime.Week then
|
|
local _curSec = GameCenter.HeartSystem.ServerZoneTime - startTime
|
|
if _curSec >= _joinTime.Start * 60 and _curSec <= _joinTime.End * 60 then
|
|
_ret = true
|
|
end
|
|
end
|
|
end
|
|
return _ret
|
|
end
|
|
|
|
function LoversTopData:IsOverH(week, startTime)
|
|
local _ret = false
|
|
local _joinTime = self:GetJoinTimeH()
|
|
if _joinTime ~= nil then
|
|
if week == _joinTime.Week then
|
|
local _curSec = GameCenter.HeartSystem.ServerZoneTime - startTime
|
|
if _curSec > _joinTime.End * 60 then
|
|
_ret = true
|
|
end
|
|
end
|
|
end
|
|
return _ret
|
|
end
|
|
|
|
function LoversTopData:CheckMsgTpisL(week, startSec)
|
|
local _ret = false
|
|
local _canJoin = self:CanJoinL(week, startSec)
|
|
if _canJoin and not self.L_MsgBoxActive and GameCenter.MapLogicSystem.MapCfg ~= nil and GameCenter.MapLogicSystem.MapCfg.ReceiveType == 2 then
|
|
--可以参加小组赛
|
|
self.L_MsgBoxActive = true
|
|
GameCenter.MsgPromptSystem:ShowSelectMsgBox(
|
|
"仙侣对决冠军赛地榜开启了,是否自动进入",
|
|
DataConfig.DataMessageString.Get("C_MSGBOX_CANCEL"),
|
|
DataConfig.DataMessageString.Get("C_MSGBOX_OK"),
|
|
function (code)
|
|
if code == MsgBoxResultCode.Button2 then
|
|
GameCenter.MainFunctionSystem:DoFunctionCallBack(FunctionStartIdCode.LoversTopFight)
|
|
end
|
|
self.L_MsgBoxActive = false
|
|
end,
|
|
function (select)
|
|
if select then
|
|
self.L_IsMsgTishi = false
|
|
else
|
|
self.L_IsMsgTishi = true
|
|
end
|
|
end,
|
|
DataConfig.DataMessageString.Get("MASTER_BENCILOGINNOTNOTICE"),
|
|
false, false, 15, 4, 1, nil, nil, 0, true
|
|
)
|
|
_ret = true
|
|
end
|
|
return _ret
|
|
end
|
|
|
|
function LoversTopData:CheckMsgTpisH(week, startSec)
|
|
local _ret = false
|
|
local _canJoin = self:CanJoinH(week, startSec)
|
|
if _canJoin and not self.H_MsgBoxActive and GameCenter.MapLogicSystem.MapCfg and GameCenter.MapLogicSystem.MapCfg.ReceiveType == 2 then
|
|
--可以参加小组赛
|
|
self.H_MsgBoxActive = true
|
|
GameCenter.MsgPromptSystem:ShowSelectMsgBox(
|
|
"仙侣对决冠军赛天榜开启了,是否自动进入",
|
|
DataConfig.DataMessageString.Get("C_MSGBOX_CANCEL"),
|
|
DataConfig.DataMessageString.Get("C_MSGBOX_OK"),
|
|
function (code)
|
|
if code == MsgBoxResultCode.Button2 then
|
|
GameCenter.MainFunctionSystem:DoFunctionCallBack(FunctionStartIdCode.LoversTopFight)
|
|
end
|
|
self.H_MsgBoxActive = false
|
|
end,
|
|
function (select)
|
|
if select then
|
|
self.H_IsMsgTishi = false
|
|
else
|
|
self.H_IsMsgTishi = true
|
|
end
|
|
end,
|
|
DataConfig.DataMessageString.Get("MASTER_BENCILOGINNOTNOTICE"),
|
|
false, false, 15, 4, 1, nil, nil, 0, true
|
|
)
|
|
_ret = true
|
|
end
|
|
return _ret
|
|
end
|
|
|
|
--获取冠军赛天榜时间字典
|
|
function LoversTopData:GetTimeDicH()
|
|
if self.H_TimeDic == nil then
|
|
local _startTime = 0
|
|
self.H_TimeDic = Dictionary:New()
|
|
local _foreach = function(key, value)
|
|
if value ~= nil and value.Type == 4 then
|
|
local _list1 = Utils.SplitNumber(value.StartTime, "_")
|
|
local _list2 = Utils.SplitNumber(value.OverTime, "_")
|
|
local _time = nil
|
|
if _startTime == 0 then
|
|
_time = {PreStart = _list1[2], Start = _list1[2], End = _list2[2]}
|
|
_startTime = _list2[2]
|
|
else
|
|
_time = {PreStart = _startTime, Start = _list1[2], End = _list2[2]}
|
|
_startTime = _list2[2]
|
|
end
|
|
self.H_TimeDic:Add(value.Game, _time)
|
|
end
|
|
end
|
|
DataConfig.DataMarryBattleTime:Foreach(_foreach)
|
|
end
|
|
return self.H_TimeDic
|
|
end
|
|
|
|
--获取冠军赛地榜时间字典
|
|
function LoversTopData:GetTimeDicL()
|
|
if self.L_TimeDic == nil then
|
|
local _startTime = 0
|
|
self.L_TimeDic = Dictionary:New()
|
|
local _foreach = function(key, value)
|
|
if value ~= nil and value.Type == 3 then
|
|
local _list1 = Utils.SplitNumber(value.StartTime, "_")
|
|
local _list2 = Utils.SplitNumber(value.OverTime, "_")
|
|
local _time = nil
|
|
if _startTime == 0 then
|
|
_time = {PreStart = _list1[2], Start = _list1[2], End = _list2[2]}
|
|
_startTime = _list2[2]
|
|
else
|
|
_time = {PreStart = _startTime, Start = _list1[2], End = _list2[2]}
|
|
_startTime = _list2[2]
|
|
end
|
|
self.L_TimeDic:Add(value.Game, _time)
|
|
end
|
|
end
|
|
DataConfig.DataMarryBattleTime:Foreach(_foreach)
|
|
end
|
|
return self.L_TimeDic
|
|
end
|
|
|
|
function LoversTopData:IsFight(round, type)
|
|
local _ret = false
|
|
local _timeDic = nil
|
|
if Type == 1 then
|
|
--天榜
|
|
_timeDic = self:GetTimeDicH()
|
|
else
|
|
--地榜
|
|
_timeDic = self:GetTimeDicL()
|
|
end
|
|
if _timeDic ~= nil then
|
|
local _time = _timeDic[round]
|
|
if _time ~= nil then
|
|
local _curSec = GameCenter.HeartSystem.ServerZoneTime - GameCenter.LoversFightSystem.StartSec
|
|
if _curSec >= _time.Start * 60 and _curSec <= _time.End then
|
|
_ret = true
|
|
end
|
|
end
|
|
end
|
|
return _ret
|
|
end
|
|
|
|
return LoversTopData |