412 lines
No EOL
15 KiB
Lua
412 lines
No EOL
15 KiB
Lua
XFubenNewCharActivityManagerCreator = function()
|
||
local XFubenNewCharActivityManager = {}
|
||
local TreasureRecord = {}
|
||
local StarRecords = {}
|
||
local KoroLastOpenPanel
|
||
|
||
-- 注册出战界面代理
|
||
local function RegisterEditBattleProxy()
|
||
XUiNewRoomSingleProxy.RegisterProxy(XDataCenter.FubenManager.StageType.NewCharAct, require("XUi/XUiNewChar/XUiNewCharNewRoomSingle"))
|
||
end
|
||
|
||
local function Init()
|
||
RegisterEditBattleProxy()
|
||
-- 登录时服务端推送任务完成情况
|
||
end
|
||
|
||
local FUBEN_NEWCHAR_PROTO = {
|
||
TeachingTreasureRewardRequest = "TeachingTreasureRewardRequest",
|
||
}
|
||
|
||
local GetStarsCount = function(starsMark)
|
||
local count = (starsMark & 1) + (starsMark & 2 > 0 and 1 or 0) + (starsMark & 4 > 0 and 1 or 0)
|
||
local starMap = {(starsMark & 1) > 0, (starsMark & 2) > 0, (starsMark & 4) > 0 }
|
||
return count, starMap
|
||
end
|
||
|
||
-- [初始化数据]
|
||
function XFubenNewCharActivityManager.InitStageInfo()
|
||
local actTemplates = XFubenNewCharConfig.GetActTemplates()
|
||
for _, actTemplate in pairs(actTemplates or {}) do
|
||
for _, stageId in pairs(actTemplate.StageId) do
|
||
local stageInfo = XDataCenter.FubenManager.GetStageInfo(stageId)
|
||
if stageInfo then
|
||
stageInfo.Type = XDataCenter.FubenManager.StageType.NewCharAct
|
||
end
|
||
end
|
||
|
||
for _, stageId in pairs(actTemplate.ChallengeStage) do
|
||
local stageInfo = XDataCenter.FubenManager.GetStageInfo(stageId)
|
||
if stageInfo then
|
||
stageInfo.Type = XDataCenter.FubenManager.StageType.NewCharAct
|
||
end
|
||
end
|
||
end
|
||
|
||
-- 通关后需要会执行InitStage 所以需要刷新
|
||
XFubenNewCharActivityManager.RefreshStagePassed()
|
||
end
|
||
|
||
function XFubenNewCharActivityManager.RefreshStagePassed()
|
||
local actTemplates = XFubenNewCharConfig.GetActTemplates()
|
||
for _, actTemplate in pairs(actTemplates) do
|
||
for _, stageId in pairs(actTemplate.StageId) do
|
||
local stageInfo = XDataCenter.FubenManager.GetStageInfo(stageId)
|
||
local stageCfg = XDataCenter.FubenManager.GetStageCfg(stageId)
|
||
if stageInfo then
|
||
stageInfo.Passed = StarRecords[stageId] or false
|
||
stageInfo.StarsMap = XFubenNewCharActivityManager.GetStarMap(stageId)
|
||
stageInfo.Unlock = true
|
||
stageInfo.IsOpen = true
|
||
|
||
if stageCfg.RequireLevel > 0 and XPlayer.Level < stageCfg.RequireLevel then
|
||
stageInfo.Unlock = false
|
||
stageInfo.IsOpen = false
|
||
end
|
||
for _, preStageId in pairs(stageCfg.PreStageId or {}) do
|
||
if preStageId > 0 then
|
||
if not StarRecords[preStageId] then
|
||
stageInfo.Unlock = false
|
||
stageInfo.IsOpen = false
|
||
break
|
||
end
|
||
end
|
||
end
|
||
|
||
end
|
||
end
|
||
|
||
for _, stageId in pairs(actTemplate.ChallengeStage) do
|
||
local stageInfo = XDataCenter.FubenManager.GetStageInfo(stageId)
|
||
local stageCfg = XDataCenter.FubenManager.GetStageCfg(stageId)
|
||
if stageInfo then
|
||
stageInfo.Passed = StarRecords[stageId] or false
|
||
stageInfo.StarsMap = XFubenNewCharActivityManager.GetStarMap(stageId)
|
||
stageInfo.Unlock = true
|
||
stageInfo.IsOpen = true
|
||
|
||
if stageCfg.RequireLevel > 0 and XPlayer.Level < stageCfg.RequireLevel then
|
||
stageInfo.Unlock = false
|
||
stageInfo.IsOpen = false
|
||
end
|
||
for _, preStageId in pairs(stageCfg.PreStageId or {}) do
|
||
if preStageId > 0 then
|
||
if not StarRecords[preStageId] then
|
||
stageInfo.Unlock = false
|
||
stageInfo.IsOpen = false
|
||
break
|
||
end
|
||
end
|
||
end
|
||
|
||
end
|
||
end
|
||
end
|
||
end
|
||
|
||
-- 在进入战斗前,构建PreFightData请求XFightData
|
||
function XFubenNewCharActivityManager.PreFight(stage, teamId)
|
||
local preFight = {}
|
||
preFight.CardIds = {}
|
||
preFight.RobotIds = {}
|
||
preFight.StageId = stage.StageId
|
||
|
||
if not stage.RobotId or #stage.RobotId <= 0 then
|
||
local teamData = XDataCenter.TeamManager.GetTeamData(teamId)
|
||
for i, v in pairs(teamData) do
|
||
local isRobot = XRobotManager.CheckIsRobotId(v)
|
||
preFight.RobotIds[i] = isRobot and v or 0
|
||
preFight.CardIds[i] = isRobot and 0 or v
|
||
end
|
||
preFight.CaptainPos = XDataCenter.TeamManager.GetTeamCaptainPos(teamId)
|
||
preFight.FirstFightPos = XDataCenter.TeamManager.GetTeamFirstFightPos(teamId)
|
||
end
|
||
|
||
return preFight
|
||
end
|
||
|
||
function XFubenNewCharActivityManager.CheckStagePass(stageId)
|
||
return StarRecords[stageId] and true or false
|
||
end
|
||
|
||
-- 获取所有关卡进度
|
||
function XFubenNewCharActivityManager.GetStageSchedule(actId)
|
||
local template = XFubenNewCharConfig.GetDataById(actId)
|
||
|
||
local passCount = 0
|
||
local allCount = #template.StageId
|
||
|
||
for _, stageId in ipairs(template.StageId) do
|
||
if StarRecords[stageId] then
|
||
passCount = passCount + 1
|
||
end
|
||
end
|
||
|
||
return passCount, allCount
|
||
end
|
||
|
||
-- 获取篇章星数
|
||
function XFubenNewCharActivityManager.GetStarProgressById(actId)
|
||
local template = XFubenNewCharConfig.GetDataById(actId)
|
||
local totalStars = template.TotalStars
|
||
local ownStars = 0
|
||
for _,v in ipairs(template.StageId) do
|
||
local starsMark = StarRecords[v]
|
||
local starCount = starsMark and GetStarsCount(starsMark) or 0
|
||
ownStars = ownStars + starCount
|
||
end
|
||
return ownStars, totalStars or 0
|
||
end
|
||
|
||
--库洛姆版本篇章星数获取
|
||
function XFubenNewCharActivityManager.GetKoroStarProgressById(actId)
|
||
local template = XFubenNewCharConfig.GetDataById(actId)
|
||
local totalStars = template.TotalStars
|
||
local ownStars = 0
|
||
for _,v in ipairs(template.ChallengeStage) do
|
||
local starsMark = StarRecords[v]
|
||
local starCount = starsMark and GetStarsCount(starsMark) or 0
|
||
ownStars = ownStars + starCount
|
||
end
|
||
return ownStars, totalStars or 0
|
||
end
|
||
|
||
function XFubenNewCharActivityManager.GetAvailableActs()
|
||
local acts = XFubenNewCharConfig.GetActTemplates()
|
||
local activityList = {}
|
||
local now = XTime.GetServerNowTimestamp()
|
||
for _, v in pairs(acts) do
|
||
local beginTimeSecond, endTimeSecond = XFubenNewCharConfig.GetActivityTime(v.Id)
|
||
if beginTimeSecond and endTimeSecond then
|
||
if (not XFunctionManager.CheckFunctionFitter(v.FunctionOpenId)) and now > beginTimeSecond and endTimeSecond > now then
|
||
table.insert(activityList, {
|
||
Id = v.Id,
|
||
Type = XDataCenter.FubenManager.ChapterType.NewCharAct,
|
||
Name = v.Name,
|
||
Icon = v.BannerBg,
|
||
})
|
||
end
|
||
end
|
||
end
|
||
return activityList
|
||
end
|
||
|
||
|
||
function XFubenNewCharActivityManager.HandleNewCharActData(data)
|
||
for _, info in ipairs(data.ActivityInfo) do
|
||
for _, v in ipairs(info.TreasureRecord) do
|
||
TreasureRecord[v] = true
|
||
end
|
||
|
||
for _, v in ipairs(info.StarRecords) do
|
||
XFubenNewCharActivityManager.HandleNewStageStarRecord(v)
|
||
end
|
||
end
|
||
XFubenNewCharActivityManager.RefreshStagePassed()
|
||
end
|
||
|
||
function XFubenNewCharActivityManager.HandleNewStageStarRecord(data)
|
||
-- Id 是指StageId(关卡Id)
|
||
StarRecords[data.Id] = data.StarsMark
|
||
XFubenNewCharActivityManager.RefreshStagePassed()
|
||
XEventManager.DispatchEvent(XEventId.EVENT_KORO_CHAR_ACTIVITY_REDPOINTEVENT)
|
||
end
|
||
|
||
function XFubenNewCharActivityManager.GetStarMap(stageId)
|
||
local starsMark = StarRecords[stageId] or 0
|
||
local count, starMap = GetStarsCount(starsMark)
|
||
return starMap, count
|
||
end
|
||
|
||
function XFubenNewCharActivityManager.GetStarReward(treasureId, cb)
|
||
XNetwork.Call(FUBEN_NEWCHAR_PROTO.TeachingTreasureRewardRequest, {TreasureId = treasureId},function(res)
|
||
if res.Code ~= XCode.Success then
|
||
XUiManager.TipCode(res.Code)
|
||
return
|
||
end
|
||
|
||
-- 设置已领取
|
||
TreasureRecord[treasureId] = true
|
||
if cb then
|
||
cb(res.RewardGoodsList)
|
||
end
|
||
XEventManager.DispatchEvent(XEventId.EVENT_FUBEN_NEWCHARACT_REWARD)
|
||
end)
|
||
end
|
||
|
||
-- [胜利]
|
||
function XFubenNewCharActivityManager.ShowReward(winData)
|
||
if not winData then return end
|
||
|
||
XFubenNewCharActivityManager.RefreshStagePassed()
|
||
XLuaUiManager.Open("UiSettleWinMainLine", winData)
|
||
end
|
||
|
||
function XFubenNewCharActivityManager.IsTreasureGet(treasureId)
|
||
return TreasureRecord[treasureId]
|
||
end
|
||
|
||
function XFubenNewCharActivityManager.IsOpen(actId)
|
||
local nowTime = XTime.GetServerNowTimestamp()
|
||
if not actId then
|
||
for _, v in pairs(XFubenNewCharConfig.GetActTemplates()) do
|
||
actId = v.Id
|
||
if XFunctionManager.CheckInTimeByTimeId(v.TimeId) then
|
||
return true
|
||
end
|
||
end
|
||
end
|
||
local beginTime, endTime = XFubenNewCharConfig.GetActivityTime(actId)
|
||
return beginTime <= nowTime and nowTime < endTime, beginTime, endTime
|
||
end
|
||
|
||
function XFubenNewCharActivityManager.IsChallengeable(actId)
|
||
local koroCfg = XFubenNewCharConfig.GetDataById(actId)
|
||
if not koroCfg then
|
||
return false
|
||
end
|
||
|
||
local challengeStageIds = koroCfg.StageId
|
||
if challengeStageIds then
|
||
for _, v in pairs(challengeStageIds) do
|
||
if not XFubenNewCharActivityManager.CheckStagePass(v) then
|
||
return true
|
||
end
|
||
end
|
||
end
|
||
|
||
challengeStageIds = koroCfg.ChallengeStage
|
||
if challengeStageIds then
|
||
for _, v in pairs(challengeStageIds) do
|
||
if not XFubenNewCharActivityManager.CheckStagePass(v) then
|
||
return true
|
||
end
|
||
end
|
||
end
|
||
|
||
return false
|
||
|
||
--if not XFubenNewCharActivityManager.IsOpen(actId) then return false end
|
||
--local ActStageIds = XFubenNewCharConfig.GetDataById(actId).StageId
|
||
--for _,stageId in ipairs(ActStageIds) do
|
||
-- if not XFubenNewCharActivityManager.CheckStagePass(stageId) then
|
||
-- return true
|
||
-- end
|
||
--end
|
||
--return false
|
||
end
|
||
|
||
function XFubenNewCharActivityManager.CheckTreasureReward(actId)
|
||
local hasReward = false
|
||
local template = XFubenNewCharConfig.GetDataById(actId)
|
||
local targetList = template.TreasureId
|
||
|
||
for _, var in ipairs(targetList) do
|
||
local treasureCfg = XFubenNewCharConfig.GetTreasureCfg(var)
|
||
if treasureCfg then
|
||
local requireStars = treasureCfg.RequireStar
|
||
local starCount = 0
|
||
local stageList = template.ChallengeStage or template.StageId
|
||
|
||
|
||
for _, stageId in ipairs(stageList) do
|
||
local _, star = XFubenNewCharActivityManager.GetStarMap(stageId)
|
||
starCount = starCount + star
|
||
end
|
||
|
||
if requireStars > 0 and requireStars <= starCount then
|
||
local isGet = XFubenNewCharActivityManager.IsTreasureGet(treasureCfg.TreasureId)
|
||
if not isGet then
|
||
hasReward = true
|
||
break
|
||
end
|
||
end
|
||
end
|
||
end
|
||
|
||
return hasReward
|
||
end
|
||
|
||
function XFubenNewCharActivityManager.GetStardRewardNeedStarNum(id, rewardIndex)
|
||
local trainedLevelCfg = XFubenExperimentConfigs.GetTrialLevelCfgById(id)
|
||
local trialRewardCfg = XFubenExperimentConfigs.GetTrialStarRewardCfgById(trainedLevelCfg.StarReward)
|
||
local starNumList = trialRewardCfg.StarNum
|
||
|
||
if not starNumList[rewardIndex] then
|
||
return nil
|
||
end
|
||
|
||
return starNumList[rewardIndex]
|
||
end
|
||
|
||
--库洛姆人物活动
|
||
function XFubenNewCharActivityManager.CheckChallengeRedPoint()
|
||
local koroCfg = XFubenNewCharConfig.GetNewCharKoroCfg()
|
||
if not koroCfg then
|
||
return false
|
||
end
|
||
|
||
return XDataCenter.FubenNewCharActivityManager.CheckTreasureReward(koroCfg.Id)
|
||
end
|
||
|
||
function XFubenNewCharActivityManager.CheckTeachingRedPoint()
|
||
local koroCfg = XFubenNewCharConfig.GetNewCharKoroCfg()
|
||
if not koroCfg then
|
||
return false
|
||
end
|
||
local nowTime = XTime.GetServerNowTimestamp()
|
||
local beginTime,endTime = XFunctionManager.GetTimeByTimeId(koroCfg.TimeId)
|
||
if nowTime < beginTime or nowTime > endTime then
|
||
return false
|
||
end
|
||
local challengeStageIds = koroCfg.StageId
|
||
if challengeStageIds then
|
||
for _, v in pairs(challengeStageIds) do
|
||
if not XFubenNewCharActivityManager.CheckStagePass(v) then
|
||
return true
|
||
end
|
||
end
|
||
end
|
||
|
||
return false
|
||
end
|
||
|
||
function XFubenNewCharActivityManager.SetKoroLastOpenPanel(panelStage)
|
||
KoroLastOpenPanel = panelStage
|
||
end
|
||
|
||
function XFubenNewCharActivityManager.GetKoroLastOpenPanel()
|
||
return KoroLastOpenPanel
|
||
end
|
||
|
||
function XFubenNewCharActivityManager.GetCharacterList(id)
|
||
return XFubenNewCharConfig:GetTryCharacterIds(id)
|
||
end
|
||
|
||
function XFubenNewCharActivityManager.CheckStagePassByCharacterId(characterId)
|
||
local stageIds = XFubenNewCharConfig.GetStageByCharacterId(characterId)
|
||
|
||
if XTool.IsTableEmpty(stageIds) then
|
||
return false
|
||
end
|
||
|
||
for _, stageId in pairs(stageIds or {}) do
|
||
local stageInfo = XDataCenter.FubenManager.GetStageInfo(stageId)
|
||
if not stageInfo.Passed then
|
||
return false
|
||
end
|
||
end
|
||
return true
|
||
end
|
||
|
||
XEventManager.AddEventListener(XEventId.EVENT_LOGIN_DATA_LOAD_COMPLETE, Init)
|
||
return XFubenNewCharActivityManager
|
||
end
|
||
|
||
XRpc.NotifyTeachingActivityInfo = function(data)
|
||
XDataCenter.FubenNewCharActivityManager.HandleNewCharActData(data)
|
||
end
|
||
|
||
XRpc.NotifyTeachingUpdateStageInfo = function(data)
|
||
XDataCenter.FubenNewCharActivityManager.HandleNewStageStarRecord(data.Info)
|
||
end |