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 itemConfig= ConfigManager.GetConfig(ConfigName.ItemConfig) 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 this.curSelect = 0 end --后端更新章节信息 function this.UpdataChapterData(msg,isEnd,_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 local timeIsOpen=false local chapterConfig=ConfigManager.TryGetConfigData(ConfigName.HardStageChapter,singleHardStageChapter.chapterId) if chapterConfig then local curTime=GetTimeStamp() timeIsOpen=curTime>=PlayerManager.GetServerOpenTime()+chapterConfig.OpenTime*24*60*60 end if singleHardStageChapter.chapterId > oldChapterId and _isShowChapterOpenPopup and timeIsOpen 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 if isEnd==1 then CheckRedPointStatus(RedPointType.FightLevelBoxReward) PracticeManager.StarNum = FightLevelManager.GetAllChapterStars() end 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) table.sort(configData,function(a,b) return a.Sort 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 --===================================================================== local freePriId = 5 local buyPriId = 3 local storeId = 10006 local storeData = ConfigManager.GetConfigData(ConfigName.StoreConfig,storeId) function this.GetDailyRewardData() -- LogGreen("PrivilegeManager.GetPrivilegeRemainValue(freePriId):"..PrivilegeManager.GetPrivilegeRemainValue(freePriId)) -- LogGreen("PrivilegeManager.GetPrivilegeRemainValue(buyPriId):"..PrivilegeManager.GetPrivilegeRemainValue(buyPriId)) if PrivilegeManager.GetPrivilegeRemainValue(freePriId) < 1 and PrivilegeManager.GetPrivilegeRemainValue(buyPriId) < 1 then return false end return true end -- 请求领取每日奖励 function this.RequestGetDailyReward(func) if PrivilegeManager.GetPrivilegeRemainValue(freePriId) < 1 and PrivilegeManager.GetPrivilegeRemainValue(buyPriId) < 1 then PopupTipPanel.ShowTip("今日已领取,请明日再来!") return end local s = function() if func then func() end Timer.New(function() NetManager.GetHardStageDailyReward(function(msg) PrivilegeManager.RefreshPrivilegeUsedTimes(freePriId,1)--记录抽卡次数 --PrivilegeManager.RefreshPrivilegeUsedTimes(buyPriId,1) -- 刷新红点状态 CheckRedPointStatus(RedPointType.FightLevelDailyReward) -- 触发状态改变 Game.GlobalEvent:DispatchEvent(GameEvent.FightLevel.DailyRewardStateChange) -- 显示掉落 UIManager.OpenPanel(UIName.RewardItemPopup, msg.drop, 1) end) end,1,1,false):Start() end if PrivilegeManager.GetPrivilegeRemainValue(freePriId) > 0 then s() else --检测妖晶数量 local itemId=storeData.Cost[1][1] --消耗道具 local num = PrivilegeManager.GetPrivilegeRemainValue(buyPriId) local needNum = storeData.Cost[2][PrivilegeManager.GetPrivilegeUsedTimes(buyPriId) + 1] or storeData.Cost[2][#storeData.Cost[2]] if BagManager.GetItemCountById(itemId) < needNum then PopupTipPanel.ShowTip(string.format(Language[10298],GetLanguageStrById(itemConfig[itemId].Name))) return end -- ShopManager.RequestBuyShopItem(SHOP_TYPE.FUNCTION_SHOP,storeId,1,function() -- PrivilegeManager.RefreshPrivilegeUsedTimes(buyPriId,1) -- s() -- end) NetManager.GetHardStageDailyReward(function(msg) PrivilegeManager.RefreshPrivilegeUsedTimes(buyPriId,1)--记录抽卡次数 --PrivilegeManager.RefreshPrivilegeUsedTimes(buyPriId,1) -- 刷新红点状态 CheckRedPointStatus(RedPointType.FightLevelDailyReward) -- 触发状态改变 Game.GlobalEvent:DispatchEvent(GameEvent.FightLevel.DailyRewardStateChange) -- 显示掉落 UIManager.OpenPanel(UIName.RewardItemPopup, msg.drop, 1) end) end end -- 检测红点状态 function this.CheckDailyRewardRed() if PrivilegeManager.GetPrivilegeRemainValue(freePriId) > 0 then return true end return false end return this