2024-09-01 20:49:41 +00:00
|
|
|
|
local XExFubenFestivalManager = require("XEntity/XFuben/XExFubenFestivalManager")
|
2023-07-14 19:35:33 +00:00
|
|
|
|
XFubenFestivalActivityManagerCreator = function()
|
|
|
|
|
local XFestivalChapter = require("XEntity/XFestival/XFestivalChapter")
|
2024-09-01 20:49:41 +00:00
|
|
|
|
---@class XFubenFestivalActivityManager
|
|
|
|
|
local XFubenFestivalActivityManager = XExFubenFestivalManager.New(XFubenConfigs.ChapterType.Festival)
|
|
|
|
|
---@type XFestivalChapter[]
|
2023-07-14 19:35:33 +00:00
|
|
|
|
local FestivalChapters = {}
|
|
|
|
|
XFubenFestivalActivityManager.StageFuben = 1 --战斗
|
|
|
|
|
XFubenFestivalActivityManager.StageStory = 2 --剧情
|
|
|
|
|
local StageId2ChapterIdDic = {}
|
|
|
|
|
|
|
|
|
|
function XFubenFestivalActivityManager.Init()
|
|
|
|
|
XEventManager.AddEventListener(XEventId.EVENT_PLAYER_LEVEL_CHANGE, XFubenFestivalActivityManager.RefreshChapterStages)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
-- [初始化数据]
|
|
|
|
|
function XFubenFestivalActivityManager.InitStageInfo()
|
|
|
|
|
XFubenFestivalActivityManager.InitAllEntities()
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XFubenFestivalActivityManager.InitAllEntities()
|
|
|
|
|
local festivalTemplates = XFestivalActivityConfig.GetFestivalsTemplates()
|
|
|
|
|
for _, festivalTemplate in pairs(festivalTemplates or {}) do
|
|
|
|
|
if not FestivalChapters[festivalTemplate.Id] then
|
|
|
|
|
FestivalChapters[festivalTemplate.Id] = XFestivalChapter.New(festivalTemplate.Id)
|
|
|
|
|
else
|
|
|
|
|
FestivalChapters[festivalTemplate.Id]:RefreshStages()
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XFubenFestivalActivityManager.AddStageId2ChapterId(stageId, chapterId)
|
|
|
|
|
StageId2ChapterIdDic[stageId] = chapterId
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XFubenFestivalActivityManager.GetChapterIdByStageId(stageId)
|
|
|
|
|
return StageId2ChapterIdDic[stageId] or 0
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
-- [胜利]
|
|
|
|
|
function XFubenFestivalActivityManager.ShowReward(winData)
|
|
|
|
|
if not winData then return end
|
|
|
|
|
XFubenFestivalActivityManager.RefreshStagePassedBySettleDatas(winData.SettleData)
|
|
|
|
|
XLuaUiManager.Open("UiSettleWin", winData)
|
|
|
|
|
end
|
|
|
|
|
--====================
|
|
|
|
|
--根据通关数据刷新章节关卡
|
|
|
|
|
--====================
|
|
|
|
|
function XFubenFestivalActivityManager.RefreshStagePassedBySettleDatas(settleData)
|
|
|
|
|
if not settleData then return end
|
|
|
|
|
for _, chapter in pairs(FestivalChapters) do
|
|
|
|
|
local stage = chapter:GetStageByStageId(settleData.StageId)
|
|
|
|
|
if stage then
|
|
|
|
|
stage:SetIsPass(true)
|
|
|
|
|
stage:AddPassCount(1)
|
|
|
|
|
chapter:RefreshChapterStageInfos()
|
|
|
|
|
XEventManager.DispatchEvent(XEventId.EVENT_ON_FESTIVAL_CHANGED)
|
|
|
|
|
break
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
--====================
|
|
|
|
|
--刷新章节关卡,用于外部条件变更时刷新章节关卡状态
|
|
|
|
|
--====================
|
|
|
|
|
function XFubenFestivalActivityManager.RefreshChapterStages()
|
|
|
|
|
for _, chapter in pairs(FestivalChapters) do
|
|
|
|
|
if chapter:GetIsOpen() then
|
|
|
|
|
chapter:RefreshChapterStageInfos()
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
--====================
|
|
|
|
|
--同步通关数据
|
|
|
|
|
--@param response:服务器传来的通关数据
|
|
|
|
|
--====================
|
|
|
|
|
function XFubenFestivalActivityManager.RefreshStagePassed(response)
|
|
|
|
|
for _, info in pairs(response.FestivalInfos or {}) do
|
|
|
|
|
local chapter = FestivalChapters[info.Id]
|
|
|
|
|
if chapter then
|
|
|
|
|
for _, stageInfos in pairs(info.StageInfos or {}) do
|
|
|
|
|
local stage = chapter:GetStageByStageId(stageInfos.Id)
|
|
|
|
|
if stage then
|
|
|
|
|
stage:SetIsPass(true)
|
|
|
|
|
stage:SetPassCount(stageInfos.ChallengeCount)
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
chapter:RefreshChapterStageInfos()
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
--====================
|
|
|
|
|
--根据节日ID获取节日活动的通关数据
|
|
|
|
|
--@return1 通关总数
|
|
|
|
|
--@return2 关卡总数
|
|
|
|
|
--====================
|
|
|
|
|
function XFubenFestivalActivityManager.GetFestivalProgress(festivalId)
|
|
|
|
|
local chapter = FestivalChapters[festivalId]
|
|
|
|
|
if not chapter then return 0, 0 end
|
|
|
|
|
return chapter:GetStagePassCount(), chapter:GetStageTotalCount()
|
|
|
|
|
end
|
|
|
|
|
--====================
|
|
|
|
|
--根据节日ID获取节日活动是否在开放时间内
|
|
|
|
|
--@param festivalId:节日配置Id
|
|
|
|
|
--====================
|
|
|
|
|
function XFubenFestivalActivityManager.GetAvailableFestivals()
|
|
|
|
|
local activityList = {}
|
|
|
|
|
for _, chapter in pairs(FestivalChapters) do
|
|
|
|
|
if chapter:GetIsOpen() then
|
|
|
|
|
table.insert(activityList, {
|
|
|
|
|
Id = chapter:GetChapterId(),
|
|
|
|
|
Type = chapter:GetChapterType(),
|
|
|
|
|
Name = chapter:GetName(),
|
|
|
|
|
Icon = chapter:GetBannerBg(),
|
|
|
|
|
})
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
return activityList
|
|
|
|
|
end
|
2024-09-01 20:49:41 +00:00
|
|
|
|
|
|
|
|
|
function XFubenFestivalActivityManager.GetFestivalsByUiType(uiType)
|
|
|
|
|
local result = {}
|
|
|
|
|
for _, chapter in pairs(FestivalChapters) do
|
|
|
|
|
if chapter:GetUiType() == uiType then
|
|
|
|
|
table.insert(result, chapter)
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
return result
|
|
|
|
|
end
|
|
|
|
|
|
2023-07-14 19:35:33 +00:00
|
|
|
|
--====================
|
|
|
|
|
--根据节日ID获取节日活动是否在开放时间内
|
|
|
|
|
--@param festivalId:节日配置Id
|
|
|
|
|
--====================
|
|
|
|
|
function XFubenFestivalActivityManager.IsFestivalInActivity(festivalId)
|
|
|
|
|
local chapter = FestivalChapters[festivalId]
|
|
|
|
|
if chapter then
|
|
|
|
|
return chapter:GetIsInTime()
|
|
|
|
|
end
|
|
|
|
|
return false
|
|
|
|
|
end
|
|
|
|
|
--====================
|
|
|
|
|
--根据节日ID和关卡ID获取节日关卡对象
|
|
|
|
|
--@param festivalId:节日配置Id
|
|
|
|
|
--@param stageId:关卡表Id
|
|
|
|
|
--====================
|
2024-09-01 20:49:41 +00:00
|
|
|
|
---@return XFestivalStage
|
2023-07-14 19:35:33 +00:00
|
|
|
|
function XFubenFestivalActivityManager.GetFestivalStageByFestivalIdAndStageId(festivalId, stageId)
|
|
|
|
|
local chapter = FestivalChapters[festivalId]
|
|
|
|
|
if not chapter then return end
|
|
|
|
|
return chapter:GetStageByStageId(stageId)
|
|
|
|
|
end
|
|
|
|
|
--====================
|
|
|
|
|
--根据节日ID和关卡ID获取节日章节对象
|
|
|
|
|
--@param festivalId:节日配置Id
|
|
|
|
|
--====================
|
|
|
|
|
function XFubenFestivalActivityManager.GetFestivalChapterById(festivalId)
|
|
|
|
|
return FestivalChapters[festivalId]
|
|
|
|
|
end
|
|
|
|
|
--====================
|
|
|
|
|
--根据关卡ID获取关卡是否开放
|
|
|
|
|
--@param stageId:关卡ID
|
|
|
|
|
--====================
|
|
|
|
|
function XFubenFestivalActivityManager.CheckPassedByStageId(stageId)
|
|
|
|
|
for _, chapter in pairs(FestivalChapters) do
|
|
|
|
|
local stage = chapter:GetStageByStageId(stageId)
|
|
|
|
|
if stage then
|
|
|
|
|
return stage:GetIsPass()
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
return false
|
|
|
|
|
end
|
2024-09-01 20:49:41 +00:00
|
|
|
|
--====================
|
|
|
|
|
--获取所有在开放时间内的节日活动Id
|
|
|
|
|
--====================
|
|
|
|
|
function XFubenFestivalActivityManager.GetAllAvailableFestivalsId()
|
|
|
|
|
local activityList = {}
|
|
|
|
|
for _, chapter in pairs(FestivalChapters) do
|
|
|
|
|
if chapter:GetIsOpen() then
|
|
|
|
|
table.insert(activityList, chapter:GetChapterId())
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
return activityList
|
|
|
|
|
end
|
|
|
|
|
-- 红点的显示
|
|
|
|
|
-- 每天凌晨5点(通用重置时间)检测是否存在未通关关卡,存在则刷新红点显示
|
|
|
|
|
-- 点击进活动界面,红点消失,当天未重置前不再显示
|
|
|
|
|
function XFubenFestivalActivityManager.CheckFestivalRedPoint(sectionId)
|
|
|
|
|
local finishCount, totalCount = XFubenFestivalActivityManager.GetFestivalProgress(sectionId)
|
|
|
|
|
if finishCount < totalCount and not XFubenFestivalActivityManager.CheckFestivalActivityIsOpen(sectionId) then
|
|
|
|
|
return true
|
|
|
|
|
end
|
|
|
|
|
return false
|
|
|
|
|
end
|
|
|
|
|
-- 判断是否是红点判断的节日
|
|
|
|
|
function XFubenFestivalActivityManager.CheckFesticalAcitvityTimeIsOpen(sectionId)
|
|
|
|
|
if XTool.IsTableEmpty(FestivalChapters[sectionId]) then
|
|
|
|
|
return false
|
|
|
|
|
end
|
|
|
|
|
local timeId = FestivalChapters[sectionId]:GetActivityTimeId()
|
|
|
|
|
if not XTool.IsNumberValid(timeId) then
|
|
|
|
|
return false
|
|
|
|
|
else
|
|
|
|
|
local startTime, endTime = XFunctionManager.GetTimeByTimeId(timeId)
|
|
|
|
|
local nowTime = XTime.GetServerNowTimestamp()
|
|
|
|
|
return (nowTime >= startTime) and (nowTime < endTime)
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
-- 本地保存key
|
|
|
|
|
function XFubenFestivalActivityManager.GetFestivalActivityKey(sectionId)
|
|
|
|
|
return string.format("%s_%s_%s", "FubenFestivalActivityRedPoint", XPlayer.Id, sectionId)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XFubenFestivalActivityManager.CheckFestivalActivityIsOpen(sectionId)
|
|
|
|
|
local key = XFubenFestivalActivityManager.GetFestivalActivityKey(sectionId)
|
|
|
|
|
local updateTime = XSaveTool.GetData(key)
|
|
|
|
|
if not updateTime then
|
|
|
|
|
return false
|
|
|
|
|
end
|
|
|
|
|
return XTime.GetServerNowTimestamp() < updateTime
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XFubenFestivalActivityManager.SaveFestivalActivityIsOpen(sectionId)
|
|
|
|
|
if XFubenFestivalActivityManager.CheckFestivalActivityIsOpen(sectionId) then
|
|
|
|
|
return
|
|
|
|
|
end
|
|
|
|
|
local key = XFubenFestivalActivityManager.GetFestivalActivityKey(sectionId)
|
|
|
|
|
local updateTime = XTime.GetSeverTomorrowFreshTime()
|
|
|
|
|
XSaveTool.SaveData(key, updateTime)
|
|
|
|
|
end
|
|
|
|
|
|
2023-07-14 19:35:33 +00:00
|
|
|
|
-- [播放剧情]
|
|
|
|
|
function XFubenFestivalActivityManager.FinishStoryRequest(stageId, cb)
|
|
|
|
|
XNetwork.Call("EnterStoryRequest", { StageId = stageId }, function(res)
|
|
|
|
|
cb = cb or function() end
|
|
|
|
|
if res.Code == XCode.Success then
|
|
|
|
|
cb(res)
|
|
|
|
|
else
|
|
|
|
|
XUiManager.TipCode(res.Code)
|
|
|
|
|
end
|
|
|
|
|
end)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XFubenFestivalActivityManager.OnAsyncFestivalStages(response)
|
|
|
|
|
if not response then return end
|
|
|
|
|
XFubenFestivalActivityManager.RefreshStagePassed(response)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
XFubenFestivalActivityManager.Init()
|
|
|
|
|
return XFubenFestivalActivityManager
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
XRpc.NotifyFestivalData = function(response)
|
|
|
|
|
XDataCenter.FubenFestivalActivityManager.OnAsyncFestivalStages(response)
|
|
|
|
|
end
|