440 lines
20 KiB
Lua
440 lines
20 KiB
Lua
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<b.Sort
|
||
end)
|
||
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
|
||
--=====================================================================
|
||
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 |