FightLevelManager = {}; local this = FightLevelManager local HardStageChapter = ConfigManager.GetConfig(ConfigName.HardStageChapter) local HardStage = ConfigManager.GetConfig(ConfigName.HardStage) local HardStageReward = ConfigManager.GetConfig(ConfigName.HardStageReward) local HardStageBuff = ConfigManager.GetConfig(ConfigName.HardStageBuff) local stateList = {--状态:0-7星级状态,8为荣耀三星,0为小节点未通过1为小节点通过 [0] = {0,0,0},--0 为未获得星 1 为 已获得星 二进制 [1] = {0,0,1}, [2] = {0,1,0}, [3] = {0,1,1}, [4] = {1,0,0}, [5] = {1,0,1}, [6] = {1,1,0}, [7] = {1,1,1}, } local allChapterData = {}--所有章节信息 local curChapterId = 1--当前章节id local curChapterLevelId = 1--当前章节中小关卡id 打一关前端自己更新一次 local isShowChapterOpenPopup = false--弹出章节开启标志 function this.Initialize() allChapterData = {} for index, config in ConfigPairs(HardStageChapter) do if config then local singleChapterData = {} singleChapterData.chapterId = config.Id singleChapterData.config = config singleChapterData.state = 0--未开启 1 开启 singleChapterData.stars = 0--章节获得总星数 singleChapterData.HardStageChapter = {}--章节中小关卡信息 local curMaxStarNum = 0 singleChapterData.node = {} local curChapterAllLevel = ConfigManager.GetAllConfigsDataByKey(ConfigName.HardStage,"Chapter", config.Id) for j = 1, #curChapterAllLevel do curMaxStarNum = curMaxStarNum + curChapterAllLevel[j].HighestStar local HardStageNode = {} HardStageNode.nodeId = curChapterAllLevel[j].Id HardStageNode.type = curChapterAllLevel[j].StageType--类型:0.大节点1.小节点 HardStageNode.state = 0--状态:0-7星级状态,8为荣耀三星,0为小节点未通过1为小节点通过 HardStageNode.config = curChapterAllLevel[j]--表 singleChapterData.node[HardStageNode.nodeId] = HardStageNode end LogYellow("LengthOfTable(singleChapterData.node) "..LengthOfTable(singleChapterData.node)) singleChapterData.reward = {} singleChapterData.curMaxStarNum = curMaxStarNum--章节总星数 allChapterData[config.Id] = singleChapterData end end end --后端更新章节信息 function this.UpdataChapterData(msg,_isShowChapterOpenPopup) LogYellow("msg.chapter "..#msg.chapter) local oldChapterId = this.GetCurChapterId() if msg then for i = 1, #msg.chapter do local singleHardStageChapter = allChapterData[msg.chapter[i].chapterId] LogYellow("msg.chapter[i].chapterId "..msg.chapter[i].chapterId.." "..msg.chapter[i].stars.." node num "..#msg.chapter[i].node.." reward num "..#msg.chapter[i].reward) LogYellow("singleHardStageChapter.stars "..singleHardStageChapter.stars) singleHardStageChapter.chapterId = msg.chapter[i].chapterId if singleHardStageChapter.chapterId > oldChapterId and _isShowChapterOpenPopup then this.SetisShowChapterOpenPopup(true) end this.SetCurChapterId(singleHardStageChapter.chapterId) singleHardStageChapter.stars = msg.chapter[i].stars--章节获得总星数 -- singleHardStageChapter.node = {} for j = 1, #msg.chapter[i].node do local HardStageNode = {} HardStageNode.nodeId = msg.chapter[i].node[j].nodeId HardStageNode.type = msg.chapter[i].node[j].type--类型:0.大节点1.小节点 HardStageNode.state = msg.chapter[i].node[j].state--状态:0-7星级状态,8为荣耀三星,0为小节点未通过1为小节点通过 HardStageNode.config = HardStage[msg.chapter[i].node[j].nodeId]--表 this.SetCurChapterLevelId(HardStageNode.nodeId) singleHardStageChapter.node[HardStageNode.nodeId] = HardStageNode end singleHardStageChapter.reward = {}--每章宝箱奖励 for k = 1, #msg.chapter[i].reward do local HardStageChapterReward = {} HardStageChapterReward.id = msg.chapter[i].reward[k].id LogYellow("msg.chapter[i].reward[k].id "..msg.chapter[i].reward[k].id) LogYellow("msg.chapter[i].reward[k].state "..msg.chapter[i].reward[k].state) HardStageChapterReward.state = msg.chapter[i].reward[k].state--0.未领取1.已领取 HardStageChapterReward.config = HardStageReward[msg.chapter[i].reward[k].id]--表 table.insert(singleHardStageChapter.reward,HardStageChapterReward) end allChapterData[msg.chapter[i].chapterId] = singleHardStageChapter end CheckRedPointStatus(RedPointType.FightLevel) end end function this.GetChapterData(allChapterId) if allChapterId and allChapterId > 0 then return allChapterData[allChapterId] elseif not allChapterId then return allChapterData end end function this.SetCurChapterId(ChapterId) curChapterId = ChapterId end function this.GetCurChapterId() return curChapterId end function this.SetisShowChapterOpenPopup(_isShowChapterOpenPopup) LogYellow("山河社稷图 是否弹章节开启 "..tostring(_isShowChapterOpenPopup)) isShowChapterOpenPopup = _isShowChapterOpenPopup end function this.GetisShowChapterOpenPopup() return isShowChapterOpenPopup end function this.SetCurChapterLevelId(ChapterLevelId) LogYellow("设置最新开启的小关id "..ChapterLevelId) curChapterLevelId = ChapterLevelId end function this.GetCurChapterLevelId() return curChapterLevelId end function this.GetAllChapterStars() local allStarNum = 0 for i = 1, #allChapterData do allStarNum = allStarNum + allChapterData[i].stars end return allStarNum end function this.GetCurLevelStarState(starNum,index) return stateList[starNum][index] == 1 end --请求回放 function this.HardStageReportRequset(_fightLevelData, callBack) LogYellow(" _fightLevelData.nodeId ".. _fightLevelData.nodeId) NetManager.HardStageReportRequset( _fightLevelData.nodeId,function (msg)--FIGHT_LEVEL _fightLevelData.config.Chapter, if msg.player and #msg.player > 0 then UIManager.OpenPanel(UIName.FightLevelSingleLevelInfoPopup,FIGHTLEVEL_POPUP_TYPE.BackBattle,msg.player) else PopupTipPanel.ShowTip("尚无符合条件的回放!") end end) end --开始战斗 local HardStageFightResponseMsg = {} local curBattlefightLevelData = {} function this.FightLevelFightBattle(_fightLevelData, callBack) LogYellow("山河社稷图请求战斗 星级 ".._fightLevelData.nodeId) LogYellow("UIManager.IsOpen(UIName.FightLevelSingleLevelInfoPopup) "..tostring(UIManager.IsOpen(UIName.FightLevelSingleLevelInfoPopup))) -- if UIManager.IsOpen(UIName.FightLevelSingleLevelInfoPopup) then UIManager.ClosePanel(UIName.FightLevelSingleLevelInfoPopup) -- end NetManager.HardStageFightRequest(_fightLevelData.nodeId, FormationTypeDef.FIGHT_LEVEL,function (msg)--FIGHT_LEVEL LogYellow("山河社稷图回复战斗 星级 "..msg.stars) LogYellow("山河社稷图回复战斗 drop "..#msg.drop.itemlist) HardStageFightResponseMsg = msg curBattlefightLevelData = _fightLevelData if _fightLevelData.config.StageType == FIGHTLEVEL_STAGETYPE.MainLevel then local fightData = BattleManager.GetBattleServerData(msg,0) UIManager.OpenPanel(UIName.BattlePanel, fightData, BATTLE_TYPE.FIGHTLEVEL, callBack) elseif _fightLevelData.config.StageType == FIGHTLEVEL_STAGETYPE.AssistantLevel then local fightData = BattleManager.GetBattleServerData(msg,0) UIManager.OpenPanel(UIName.BattlePanel, fightData, BATTLE_TYPE.FIGHT_ASSISTANT_LEVEL, callBack) elseif _fightLevelData.config.StageType == FIGHTLEVEL_STAGETYPE.AssistantLevelReward then UIManager.OpenPanel(UIName.RewardItemPopup,msg.drop,1,function() --刷新数据刷新界面 if callBack then callBack() callBack = nil end end) end end) end --战斗数据 function this.GetHardStageFightResponseMsg() return HardStageFightResponseMsg end --当前战斗关卡数据 function this.GetcurBattlefightLevelData() return curBattlefightLevelData end --入口红点判断 function this.GetChapterRewardBoxRedPoint() for i = 1, #allChapterData do local curChapterIsShowRed = this.GetSingleChapterRewardBoxRedPoint(i) if curChapterIsShowRed then LogYellow("山河社稷图入口 redpoint true") return true end end LogYellow("山河社稷图入口 redpoint false") return false end --章节入口红点判断 function this.GetSingleChapterRewardBoxRedPoint(chapterId) if allChapterData[chapterId] and allChapterData[chapterId].stars > 0 then if allChapterData[chapterId].reward and #allChapterData[chapterId].reward > 0 then for k = 1, #allChapterData[chapterId].reward do if allChapterData[chapterId].reward[k].state == 0 and allChapterData[chapterId].stars >= allChapterData[chapterId].reward[k].config.Star then LogYellow("chapterId true redpoint: "..chapterId) return true end end end end LogYellow("chapterId false redpoint: "..chapterId) return false end --编队数据判断 function this.GetAllHeroDatas(limitLevel,parameter) local heros = HeroManager.GetAllHeroDatas(limitLevel) if parameter and parameter.config and parameter.config.StageType == FIGHTLEVEL_STAGETYPE.AssistantLevel and HardStageBuff[parameter.config.HardStageBuff] and HardStageBuff[parameter.config.HardStageBuff].Type == 101 then local Vocation = HardStageBuff[parameter.config.HardStageBuff].Vocation if Vocation and #Vocation > 0 then local newHeros = {} for i = 1, #heros do for j = 1, #Vocation do if heros[i].property == Vocation[j] then table.insert(newHeros,heros[i]) end end end return newHeros else return heros end else return heros end end function this.GetHeroDataByProperty(_proId, limitLevel,parameter) local heros = HeroManager.GetHeroDataByProperty(_proId, limitLevel) if parameter and parameter.config and parameter.config.StageType == FIGHTLEVEL_STAGETYPE.AssistantLevel and HardStageBuff[parameter.config.HardStageBuff] and HardStageBuff[parameter.config.HardStageBuff].Type == 101 then local Vocation = HardStageBuff[parameter.config.HardStageBuff].Vocation if Vocation and #Vocation > 0 then local isheros = false for j = 1, #Vocation do if _proId == Vocation[j] then isheros = true end end if isheros then return heros else return {} end else return heros end else return heros end end function this.RrefreshFormation(parameter) -- 死人后重组 local newFormation = {} -- 编队界面的编队数据 local curTeam = FormationManager.GetFormationByID(FormationTypeDef.FIGHT_LEVEL) -- 编队界面的数据 newFormation.teamHeroInfos = {} newFormation.teamPokemonInfos = {} newFormation.teamId = FormationTypeDef.EXPEDITION newFormation.teamName = curTeam.teamName newFormation.teamPokemonInfos = curTeam.teamPokemonInfos -- 成员数据 if parameter and parameter.config and parameter.config.StageType == FIGHTLEVEL_STAGETYPE.AssistantLevel and HardStageBuff[parameter.config.HardStageBuff] then for i = 1, #curTeam.teamHeroInfos do local roleData = curTeam.teamHeroInfos[i] if HardStageBuff[parameter.config.HardStageBuff].Type == 100 then if #newFormation.teamHeroInfos < 1 then--只能使用1个神将,进入战斗后复制为相同的6个神将 -- 编队界面数据重组 table.insert(newFormation.teamHeroInfos, roleData) end elseif HardStageBuff[parameter.config.HardStageBuff].Type == 101 then if roleData.heroId then local singleHeroData = HeroManager.GetSingleHeroData(roleData.heroId) local Vocation = HardStageBuff[parameter.config.HardStageBuff].Vocation for j = 1, #Vocation do if singleHeroData and singleHeroData.property == Vocation[j] then--只能上阵人系神将和佛系神将 -- 编队界面数据重组 table.insert(newFormation.teamHeroInfos, roleData) end end end end end if HardStageBuff[parameter.config.HardStageBuff].Type == 100 or HardStageBuff[parameter.config.HardStageBuff].Type == 101 then FormationManager.formationList[FormationTypeDef.FIGHT_LEVEL] = newFormation end end end function this.GetFormationHeroMaxNum(parameter) if parameter and parameter.config and parameter.config.StageType == FIGHTLEVEL_STAGETYPE.AssistantLevel and HardStageBuff[parameter.config.HardStageBuff] then if HardStageBuff[parameter.config.HardStageBuff].Type == 100 then --只能使用1个神将,进入战斗后复制为相同的6个神将 return 1 end end return ActTimeCtrlManager.MaxArmyNum() end --领取完章节宝箱数据 前端自己赋值刷新 function this.SetChapterBoxRewardData(_chapterId,_Id,_state) if allChapterData[_chapterId] then if allChapterData[_chapterId].reward then for i = 1, #allChapterData[_chapterId].reward do if allChapterData[_chapterId].reward[i].id == _Id then allChapterData[_chapterId].reward[i].state = _state end end end end end return this