miduo_client/Assets/ManagedResources/~Lua/Modules/FightLevel/FightLevelManager.lua

440 lines
20 KiB
Lua
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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