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.isFirst = false--是否是第一次荣耀 HardStageNode.isPass = false--是否通关 HardStageNode.config = curChapterAllLevel[j]--表 singleChapterData.node[HardStageNode.nodeId] = HardStageNode end singleChapterData.reward = {} singleChapterData.curMaxStarNum = curMaxStarNum--章节总星数 allChapterData[config.Id] = singleChapterData end end end --后端更新章节信息 function this.UpdataChapterData(msg,_isShowChapterOpenPopup) local oldChapterId = this.GetCurChapterId() if msg then for i = 1, #msg.chapter do local singleHardStageChapter = allChapterData[msg.chapter[i].chapterId] -- Log("chapterId:"..msg.chapter[i].chapterId.." stars"..msg.chapter[i].stars.." node"..#msg.chapter[i].node.."reward:"..#msg.chapter[i].reward.." needStars:"..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.isFirst= msg.chapter[i].node[j].isFirst--是否是第一次荣耀 HardStageNode.isPass= msg.chapter[i].node[j].isPass--节点是否通过 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 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 table.sort(singleHardStageChapter.reward, function(a,b) return a.id < b.id end) allChapterData[msg.chapter[i].chapterId] = singleHardStageChapter end CheckRedPointStatus(RedPointType.FightLevel) PracticeManager.StarNum = FightLevelManager.GetAllChapterStars() 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.GetChapterLevelData(allChapterId,levelId) if allChapterId and allChapterId > 0 and levelId and levelId > 0 then if allChapterData[allChapterId] then return allChapterData[allChapterId].node[levelId] end end end function this.SetCurChapterId(ChapterId) if curChapterId < ChapterId then curChapterId = ChapterId end end function this.GetCurChapterId() return curChapterId end function this.SetisShowChapterOpenPopup(_isShowChapterOpenPopup) Log("山河社稷图 是否弹章节开启 "..tostring(_isShowChapterOpenPopup)) isShowChapterOpenPopup = _isShowChapterOpenPopup end function this.GetisShowChapterOpenPopup() return isShowChapterOpenPopup end function this.SetCurChapterLevelId(ChapterLevelId) if curChapterLevelId < ChapterLevelId then curChapterLevelId = ChapterLevelId end 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) 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,_fightLevelData,callBack) else PopupTipPanel.ShowTip("尚无符合条件的回放!") end end) end --开始战斗 local HardStageFightResponseMsg = {} local curBattlefightLevelData = {} function this.FightLevelFightBattle(_fightLevelData, callBack) UIManager.ClosePanel(UIName.FightLevelSingleLevelInfoPopup) local curFormationTypeDef = FormationTypeDef.FIGHT_LEVEL if _fightLevelData.config.StageType == FIGHTLEVEL_STAGETYPE.MainLevel then curFormationTypeDef = FormationTypeDef.FIGHT_LEVEL else curFormationTypeDef = FormationTypeDef.FIGHT_ASSISTANTLEVEL end NetManager.HardStageFightRequest(_fightLevelData.nodeId, curFormationTypeDef,function (msg)--FIGHT_LEVEL -- Log("山河社稷图回复战斗 星级 "..msg.stars.." drop "..#msg.drop.itemlist) HardStageFightResponseMsg = msg curBattlefightLevelData = _fightLevelData -- local result = msg.stars > 0 and 1 or 0 if _fightLevelData.config.StageType == FIGHTLEVEL_STAGETYPE.MainLevel then local fightData = BattleManager.GetBattleServerData(msg,0) UIManager.OpenPanel(UIName.BattlePanel, fightData, BATTLE_TYPE.FIGHTLEVEL, callBack)--:SetResult(result) 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)--:SetResult(result) 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_ASSISTANTLEVEL) -- 编队界面的数据 newFormation.teamHeroInfos = {} newFormation.teamPokemonInfos = {} newFormation.teamId = FormationTypeDef.FIGHT_ASSISTANTLEVEL 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_ASSISTANTLEVEL] = 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 --========================= 山河试炼专用 =============================== function this.GetNextMissionStar() local data = ActivityGiftManager.GetActivityTypeInfo(ActivityTypeDef.ShanHeShiLian) local list = {} local configData = ConfigManager.GetAllConfigsDataByKey(ConfigName.ActivityRewardConfig,"ActivityId",data.activityId) for i = 1, #configData do if configData[i].ActivityId == data.activityId then if configData[i].Values[1][1] > this.GetAllChapterStars() then return configData[i].Values[1][1] - this.GetAllChapterStars() end end end return 0 end function this.CheckTrialRedPoint() if not ActivityGiftManager.IsActivityTypeOpen(ActivityTypeDef.ShanHeShiLian) then return false end local data = CommonActPageManager.GetData(ActivityTypeDef.ShanHeShiLian) for i = 1, #data.rewards do if data.rewards[i].state == 0 and data.rewards[i].otherData.Values[1][1] <= FightLevelManager.GetAllChapterStars() then return true end end return false end --===================================================================== return this