479 lines
17 KiB
Lua
479 lines
17 KiB
Lua
XFubenSpecialTrainManagerCreator = function()
|
|
|
|
local XFubenSpecialTrainManager = {}
|
|
local ActivityId --开启的活动
|
|
local WeeklyRewardIds --每周已经领取的奖励
|
|
local RewardIds --已经领取的奖励
|
|
local WeeklyStars --本周星级
|
|
local PointRewardDic = {} --积分奖励
|
|
|
|
local Proto = {
|
|
SpecialTrainGetRewardRequest = "SpecialTrainGetRewardRequest", --领奖
|
|
SpecialTrainGetWeeklyRewardRequest = "SpecialTrainGetWeeklyRewardRequest", --领奖
|
|
SpecialTrainPointRewardRequest = "SpecialTrainPointRewardRequest", --领奖
|
|
}
|
|
|
|
--活动类型
|
|
XFubenSpecialTrainManager.RewardType = {
|
|
Task = 1,
|
|
StarReward = 2
|
|
}
|
|
|
|
--当前活动Id
|
|
XFubenSpecialTrainManager.CurActiveId = -1
|
|
|
|
function XFubenSpecialTrainManager.Init()
|
|
|
|
end
|
|
|
|
|
|
--检查过期
|
|
function XFubenSpecialTrainManager.CheckActivityTimeout(id, isShowTip)
|
|
if id <= 0 then
|
|
return true
|
|
end
|
|
|
|
local curTime = XTime.GetServerNowTimestamp()
|
|
|
|
local config = XFubenSpecialTrainConfig.GetActivityConfigById(id)
|
|
local startTime, endTime = XFunctionManager.GetTimeByTimeId(config.TimeId)
|
|
if curTime < startTime then
|
|
if isShowTip then
|
|
XUiManager.TipMsg(CS.XTextManager.GetText("SpecialTrainNotOpen"))
|
|
end
|
|
return true
|
|
end
|
|
|
|
if curTime > endTime then
|
|
if isShowTip then
|
|
XUiManager.TipMsg(CS.XTextManager.GetText("SpecialTrainTimeOut"))
|
|
end
|
|
return true
|
|
end
|
|
|
|
return false
|
|
end
|
|
|
|
|
|
--返回当前活动
|
|
function XFubenSpecialTrainManager.GetSpecialTrainAcitity()
|
|
if not ActivityId then
|
|
return
|
|
end
|
|
|
|
local specialData = {}
|
|
local curTime = XTime.GetServerNowTimestamp()
|
|
|
|
local config = XFubenSpecialTrainConfig.GetActivityConfigById(ActivityId)
|
|
local startTime, endTime = XFunctionManager.GetTimeByTimeId(config.TimeId)
|
|
|
|
if curTime >= startTime and curTime < endTime then
|
|
local data = {}
|
|
data.Id = ActivityId
|
|
data.Type = XDataCenter.FubenManager.ChapterType.SpecialTrain
|
|
data.Config = config
|
|
table.insert(specialData, data)
|
|
end
|
|
return specialData
|
|
end
|
|
|
|
function XFubenSpecialTrainManager.GetCurActivityId()
|
|
if not ActivityId then
|
|
return
|
|
end
|
|
|
|
return ActivityId
|
|
end
|
|
|
|
--获取章节的星星数
|
|
function XFubenSpecialTrainManager.GetSpecialTrainNormalChapterStar(id)
|
|
|
|
local chapterCfg = XFubenSpecialTrainConfig.GetChapterConfigById(id)
|
|
if not chapterCfg then
|
|
return 0
|
|
end
|
|
|
|
if chapterCfg.RewardType ~= XFubenSpecialTrainManager.RewardType.StarReward then
|
|
return 0
|
|
end
|
|
|
|
local totalStar = 0
|
|
for i = 1, #chapterCfg.StageIds do
|
|
local stageId = chapterCfg.StageIds[i]
|
|
local stageInfo = XDataCenter.FubenManager.GetStageInfo(stageId)
|
|
local stageCfg = XDataCenter.FubenManager.GetStageCfg(stageId)
|
|
if not stageCfg.IsMultiplayer then
|
|
totalStar = totalStar + stageInfo.Stars
|
|
end
|
|
end
|
|
|
|
return totalStar
|
|
end
|
|
|
|
|
|
--获取奖励
|
|
function XFubenSpecialTrainManager.GetSpecialTrainNormalChapterReward(id)
|
|
local chapterCfg = XFubenSpecialTrainConfig.GetChapterConfigById(id)
|
|
|
|
if not chapterCfg then
|
|
return
|
|
end
|
|
|
|
if chapterCfg.RewardType ~= XFubenSpecialTrainManager.RewardType.StarReward then
|
|
return
|
|
end
|
|
|
|
local totalStar = 0
|
|
for i = 1, #chapterCfg.StageIds do
|
|
local stageId = chapterCfg.StageIds[i]
|
|
local stageInfo = XDataCenter.FubenManager.GetStageInfo(stageId)
|
|
local stageCfg = XDataCenter.FubenManager.GetStageCfg(stageId)
|
|
|
|
if not stageCfg.IsMultiplayer then
|
|
totalStar = totalStar + stageInfo.Stars
|
|
end
|
|
end
|
|
|
|
local specialStarReward = {}
|
|
|
|
for i, v in ipairs(chapterCfg.RewardParams) do
|
|
local cfg = XFubenSpecialTrainConfig.GetStarRewardConfigById(v)
|
|
if cfg then
|
|
local data = {}
|
|
data.Id = cfg.Id
|
|
data.RequireStar = cfg.RequireStar
|
|
data.RewardId = cfg.RewardId
|
|
data.IsFinish = totalStar >= cfg.RequireStar
|
|
data.IsReward = XFubenSpecialTrainManager.IsReward(cfg.Id)
|
|
specialStarReward[i] = data
|
|
end
|
|
end
|
|
|
|
return specialStarReward
|
|
end
|
|
|
|
|
|
--获取任务
|
|
function XFubenSpecialTrainManager.GetSpecialTrainChapterTask(id)
|
|
local chapterCfg = XFubenSpecialTrainConfig.GetChapterConfigById(id)
|
|
|
|
if not chapterCfg then
|
|
return
|
|
end
|
|
|
|
if chapterCfg.RewardType ~= XFubenSpecialTrainManager.RewardType.Task then
|
|
return
|
|
end
|
|
|
|
local specialStarReward = {}
|
|
|
|
for i, v in ipairs(chapterCfg.RewardParams) do
|
|
specialStarReward[i] = v
|
|
end
|
|
|
|
return specialStarReward
|
|
end
|
|
|
|
--夏活特训关关卡获得
|
|
function XFubenSpecialTrainManager.GetPhotoStages()
|
|
local stages = {}
|
|
local activityConfig = XFubenSpecialTrainConfig.GetActivityConfigById(XFubenSpecialTrainManager.GetCurActivityId())
|
|
if not activityConfig then return end
|
|
for i = 1,#activityConfig.ChapterIds do
|
|
local chapterConfig = XFubenSpecialTrainConfig.GetChapterConfigById(activityConfig.ChapterIds[i])
|
|
for j = 1, #chapterConfig.StageIds do
|
|
table.insert(stages, chapterConfig.StageIds[j])
|
|
end
|
|
end
|
|
return stages
|
|
end
|
|
|
|
function XFubenSpecialTrainManager.IsPhotoStage(stageId)
|
|
local activityConfig = XFubenSpecialTrainConfig.GetActivityConfigById(XFubenSpecialTrainManager.GetCurActivityId())
|
|
if not activityConfig then return end
|
|
for i = 1,#activityConfig.ChapterIds do
|
|
local chapterConfig = XFubenSpecialTrainConfig.GetChapterConfigById(activityConfig.ChapterIds[i])
|
|
for j = 1, #chapterConfig.StageIds do
|
|
if chapterConfig.StageIds[j] == stageId then
|
|
return true
|
|
end
|
|
end
|
|
end
|
|
return false
|
|
end
|
|
|
|
--判断是否已经领奖
|
|
function XFubenSpecialTrainManager.IsReward(rewardId)
|
|
if not rewardId then
|
|
return
|
|
end
|
|
|
|
if not RewardIds then
|
|
return false
|
|
end
|
|
|
|
for i, v in ipairs(RewardIds) do
|
|
if v == rewardId then
|
|
return true
|
|
end
|
|
end
|
|
|
|
return false
|
|
end
|
|
|
|
--读取获得奖励的状态
|
|
function XFubenSpecialTrainManager.CheckPointRewardGet(id)
|
|
return PointRewardDic[id] or false
|
|
end
|
|
|
|
--检查是不是有新的关卡可以挑战
|
|
function XFubenSpecialTrainManager.CheckNotPassStage()
|
|
local config = XFubenSpecialTrainConfig.GetActivityConfigById(ActivityId)
|
|
local chapterIds = config.ChapterIds
|
|
|
|
for _, chapterId in ipairs(chapterIds) do
|
|
local chapterCfg = XFubenSpecialTrainConfig.GetChapterConfigById(chapterId)
|
|
for i = 1, #chapterCfg.StageIds do
|
|
local stageId = chapterCfg.StageIds[i]
|
|
if not XDataCenter.FubenManager.CheckStageIsPass(stageId) then
|
|
return true
|
|
end
|
|
end
|
|
end
|
|
return false
|
|
end
|
|
|
|
function XFubenSpecialTrainManager.CheckConditionSpecialTrainRedPoint()
|
|
if not XFubenSpecialTrainManager.GetCurActivityId() or XFubenSpecialTrainManager.CheckActivityTimeout(XFubenSpecialTrainManager.GetCurActivityId(), false) then
|
|
return false
|
|
end
|
|
local config = XFubenSpecialTrainConfig.GetActivityConfigById(ActivityId)
|
|
local chapterIds = config.ChapterIds
|
|
|
|
for _, chapterId in ipairs(chapterIds) do
|
|
local chapeter = XFubenSpecialTrainConfig.GetChapterConfigById(chapterId)
|
|
if chapeter.RewardType == XFubenSpecialTrainManager.RewardType.StarReward then
|
|
local starRewardList = XFubenSpecialTrainManager.GetSpecialTrainNormalChapterReward(chapeter.Id)
|
|
for _, v in ipairs(starRewardList) do
|
|
if v.IsFinish and not v.IsReward then
|
|
return true
|
|
end
|
|
end
|
|
elseif chapeter.RewardType == XFubenSpecialTrainManager.RewardType.Task then
|
|
local tasks = XFubenSpecialTrainManager.GetSpecialTrainChapterTask(chapeter.Id)
|
|
for _, taskId in ipairs(tasks) do
|
|
local task = XDataCenter.TaskManager.GetTaskDataById(taskId)
|
|
if task and task.State == XDataCenter.TaskManager.TaskState.Achieved then
|
|
return true
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
return false
|
|
end
|
|
|
|
function XFubenSpecialTrainManager.CheckConditionSpecialTrainPointRedPoint()
|
|
if not XFubenSpecialTrainManager.GetCurActivityId() or XFubenSpecialTrainManager.CheckActivityTimeout(XFubenSpecialTrainManager.GetCurActivityId(), false) then
|
|
return false
|
|
end
|
|
local config = XFubenSpecialTrainConfig.GetActivityConfigById(ActivityId)
|
|
local nowTime = XTime.GetServerNowTimestamp() -- 海外修改,在检查红点的时候先判断活动开启时间
|
|
if nowTime >= XFunctionManager.GetEndTimeByTimeId(config.TimeId) or nowTime <= XFunctionManager.GetStartTimeByTimeId(config.TimeId) then
|
|
return false
|
|
end
|
|
if config.PointItemId == 0 then
|
|
else
|
|
local pointCount = XDataCenter.ItemManager.GetCount(config.PointItemId)
|
|
for _, pointId in ipairs(config.PointRewardId) do
|
|
local tmpPointCfg = XFubenSpecialTrainConfig.GetSpecialPointRewardConfig(pointId)
|
|
if pointCount >= tmpPointCfg.NeedPoint and not XFubenSpecialTrainManager.CheckPointRewardGet(pointId) then
|
|
return true
|
|
end
|
|
end
|
|
end
|
|
return false
|
|
end
|
|
|
|
function XFubenSpecialTrainManager.GetSpecialTrainPointItemId()
|
|
local itemId = XFubenSpecialTrainConfig.GetActivityConfigById(ActivityId).PointItemId
|
|
return itemId ~= 0 and itemId or -1
|
|
end
|
|
|
|
--领取奖励
|
|
function XFubenSpecialTrainManager.SpecialTrainGetRewardRequest(id, cb)
|
|
|
|
XNetwork.Call("SpecialTrainGetRewardRequest", { Id = id }, function(res)
|
|
if res.Code ~= XCode.Success then
|
|
XUiManager.TipCode(res.Code)
|
|
return
|
|
end
|
|
|
|
table.insert(RewardIds, id)
|
|
|
|
if cb then
|
|
cb(res.Goods)
|
|
end
|
|
|
|
|
|
CsXGameEventManager.Instance:Notify(XEventId.EVENT_FUBEN_SPECIAL_TRAIN_REWARD, id)
|
|
end)
|
|
end
|
|
|
|
function XFubenSpecialTrainManager.SpecialTrainPointRewardRequest(id, funCb)
|
|
XNetwork.Call("SpecialTrainPointRewardRequest", { Id = id }, function(res)
|
|
if res.Code ~= XCode.Success then
|
|
XUiManager.TipCode(res.Code)
|
|
return
|
|
end
|
|
|
|
PointRewardDic[id] = true
|
|
if funCb then
|
|
funCb(res.Goods)
|
|
end
|
|
|
|
CsXGameEventManager.Instance:Notify(XEventId.EVENT_FUBEN_SPECIAL_TRAIN_REWARD, id)
|
|
end)
|
|
end
|
|
|
|
-- 保存本地数据
|
|
function XFubenSpecialTrainManager.SaveSpecialTrainPrefs(value, activityId, chapterId)
|
|
if XPlayer.Id and activityId and chapterId then
|
|
local key = string.format("SpecialTrain_%s_%s_%s", tostring(XPlayer.Id), activityId, chapterId)
|
|
CS.UnityEngine.PlayerPrefs.SetInt(key, value)
|
|
CS.UnityEngine.PlayerPrefs.Save()
|
|
end
|
|
end
|
|
|
|
function XFubenSpecialTrainManager.GetSpecialTrainPrefs(activityId, chapterId)
|
|
if XPlayer.Id and activityId and chapterId then
|
|
local key = string.format("SpecialTrain_%s_%s_%s", tostring(XPlayer.Id), activityId, chapterId)
|
|
if CS.UnityEngine.PlayerPrefs.HasKey(key) then
|
|
local value = CS.UnityEngine.PlayerPrefs.GetInt(key, 0)
|
|
return value
|
|
end
|
|
end
|
|
|
|
return 0
|
|
end
|
|
|
|
|
|
--活动登录下发
|
|
function XFubenSpecialTrainManager.NotifySpecialTrainLoginData(data)
|
|
RewardIds = data.RewardIds or {}
|
|
ActivityId = data.Id
|
|
for _, pointRewardId in ipairs(data.PointRewards) do
|
|
PointRewardDic[pointRewardId] = true
|
|
end
|
|
end
|
|
|
|
--------------副本相关-------------------
|
|
--设置关卡类型
|
|
function XFubenSpecialTrainManager.InitStageInfo()
|
|
local chapterCfg = XFubenSpecialTrainConfig.GetChapterConfig()
|
|
for _, chapter in pairs(chapterCfg) do
|
|
for _, v in ipairs(chapter.StageIds) do
|
|
local stageInfo = XDataCenter.FubenManager.GetStageInfo(v)
|
|
stageInfo.Type = XDataCenter.FubenManager.StageType.SpecialTrain
|
|
end
|
|
end
|
|
end
|
|
|
|
function XFubenSpecialTrainManager.OpenFightLoading(stageId)
|
|
local stageCfg = XDataCenter.FubenManager.GetStageCfg(stageId)
|
|
if stageCfg.IsMultiplayer then
|
|
XLuaUiManager.Open("UiOnLineLoading")
|
|
else
|
|
XDataCenter.FubenManager.OpenFightLoading(stageId)
|
|
end
|
|
end
|
|
|
|
function XFubenSpecialTrainManager.CloseFightLoading(stageId)
|
|
local stageCfg = XDataCenter.FubenManager.GetStageCfg(stageId)
|
|
if stageCfg.IsMultiplayer then
|
|
XLuaUiManager.Remove("UiOnLineLoading")
|
|
else
|
|
XDataCenter.FubenManager.CloseFightLoading(stageId)
|
|
end
|
|
end
|
|
|
|
--显示奖励结算
|
|
function XFubenSpecialTrainManager.ShowReward(winData)
|
|
local stageCfg = XDataCenter.FubenManager.GetStageCfg(winData.StageId)
|
|
if stageCfg.IsMultiplayer then
|
|
|
|
if XDataCenter.FubenManager.CheckHasFlopReward(winData, true) then
|
|
XLuaUiManager.Open("UiFubenFlopReward", function()
|
|
XFubenSpecialTrainManager.OpenSettleUi(winData)
|
|
end, winData)
|
|
else
|
|
XFubenSpecialTrainManager.OpenSettleUi(winData)
|
|
--XLuaUiManager.Open("UiSummerRank", function()
|
|
-- XLuaUiManager.PopThenOpen("UiSettleWin", winData)
|
|
--end, winData)
|
|
end
|
|
else
|
|
XLuaUiManager.Open("UiSettleWinMainLine", winData)
|
|
end
|
|
|
|
end
|
|
|
|
function XFubenSpecialTrainManager.OpenSettleUi(winData)
|
|
if XDataCenter.RoomManager.RoomData then
|
|
XLuaUiManager.PopThenOpen("UiSummerEpisodeSettle",function()
|
|
XDataCenter.FubenManager.FubenSettling = false
|
|
XDataCenter.FubenManager.FubenSettleResult = nil
|
|
end)
|
|
else
|
|
XLuaUiManager.PopThenOpen("UiSettleWinMainLine", winData)
|
|
end
|
|
end
|
|
|
|
function XFubenSpecialTrainManager.CallFinishFight()
|
|
XDataCenter.FubenManager.FubenSettling = false
|
|
XDataCenter.FubenManager.FubenSettleResult = nil
|
|
CS.XGameEventManager.Instance:Notify(XEventId.EVENT_FIGHT_FINISH)
|
|
end
|
|
|
|
function XFubenSpecialTrainManager.SettleFight(result)
|
|
if XDataCenter.FubenManager.FubenSettling then
|
|
XLog.Warning("XFubenManager.SettleFight Warning, fuben is settling!")
|
|
return
|
|
end
|
|
|
|
XDataCenter.FubenManager.StatisticsFightResultDps(result)
|
|
XDataCenter.FubenManager.FubenSettling = true
|
|
local fightResult = XDataCenter.FubenManager.CtorFightResult(result)
|
|
XDataCenter.FubenManager.CurFightResult = fightResult
|
|
XNetwork.Call("FightSettleRequest", { Result = fightResult }, function(res)
|
|
XEventManager.DispatchEvent(XEventId.EVENT_FUBEN_SETTLE_REWARD, fightResult.Settle)
|
|
XDataCenter.FubenManager.FubenSettleResult = res
|
|
if res.Settle.IsWin then
|
|
XFubenSpecialTrainManager.ShowReward(res.Settle)
|
|
end
|
|
end)
|
|
end
|
|
|
|
function XFubenSpecialTrainManager.GetSavePhotoKey()
|
|
return string.format("%s_%s", "SummerEpisodePhoto", XPlayer.Id)
|
|
end
|
|
|
|
function XFubenSpecialTrainManager.SetSavePhotoValue(value)
|
|
local isSave = value == true and 1 or 0
|
|
XSaveTool.SaveData(XFubenSpecialTrainManager.GetSavePhotoKey(),isSave)
|
|
end
|
|
|
|
function XFubenSpecialTrainManager.GetSavePhotoValue()
|
|
return XSaveTool.GetData(XFubenSpecialTrainManager.GetSavePhotoKey()) == 1
|
|
end
|
|
|
|
XFubenSpecialTrainManager.Init()
|
|
|
|
return XFubenSpecialTrainManager
|
|
end
|
|
|
|
-- 登录活动数据下发
|
|
XRpc.NotifySpecialTrainLoginData = function(notifyData)
|
|
XDataCenter.FubenSpecialTrainManager.NotifySpecialTrainLoginData(notifyData)
|
|
end
|
|
|