252 lines
No EOL
9.2 KiB
Lua
252 lines
No EOL
9.2 KiB
Lua
XFubenActivityBossSingleManagerCreator = function()
|
|
local pairs = pairs
|
|
local tableInsert = table.insert
|
|
local ParseToTimestamp = XTime.ParseToTimestamp
|
|
|
|
local CurActivityId = 0 --当前活动Id
|
|
local SectionId = 0 --根据等极段开放的活动章节
|
|
local Schedule = 0 --通关进度
|
|
local StarRewardIds = {} --已经领取的列表,游戏刚进来的时候初始化
|
|
local StageInfos = {}
|
|
|
|
local XFubenActivityBossSingleManager = {}
|
|
|
|
local METHOD_NAME = {
|
|
ReceiveTreasureReward = "BossActivityStarRewardRequest",
|
|
}
|
|
|
|
function XFubenActivityBossSingleManager.GetActivitySections()
|
|
local sections = {}
|
|
|
|
if XFubenActivityBossSingleManager.IsOpen() then
|
|
local section = {
|
|
Type = XDataCenter.FubenManager.ChapterType.ActivityBossSingle,
|
|
Id = SectionId
|
|
}
|
|
tableInsert(sections, section)
|
|
end
|
|
|
|
return sections
|
|
end
|
|
|
|
function XFubenActivityBossSingleManager.InitStageInfo()
|
|
local sectionCfgs = XFubenActivityBossSingleConfigs.GetSectionCfgs()
|
|
for _, sectionCfg in pairs(sectionCfgs) do
|
|
for _, challengeId in pairs(sectionCfg.ChallengeId) do
|
|
local stageId = XFubenActivityBossSingleConfigs.GetStageId(challengeId)
|
|
local stageInfo = XDataCenter.FubenManager.GetStageInfo(stageId)
|
|
stageInfo.Type = XDataCenter.FubenManager.StageType.ActivityBossSingle
|
|
end
|
|
end
|
|
end
|
|
|
|
function XFubenActivityBossSingleManager.GetSectionStageIdList(sectionId)
|
|
local stageIdList = {}
|
|
|
|
local sectionCfg = XFubenActivityBossSingleConfigs.GetSectionCfg(sectionId)
|
|
for index, challengeId in pairs(sectionCfg.ChallengeId) do
|
|
local stageId = XFubenActivityBossSingleConfigs.GetStageId(challengeId)
|
|
stageIdList[index] = stageId
|
|
end
|
|
|
|
return stageIdList
|
|
end
|
|
|
|
--刷新通关记录
|
|
function XFubenActivityBossSingleManager.IsChallengeUnlock(challengeId)
|
|
local orderId = XFubenActivityBossSingleConfigs.GetChallengeOrderId(challengeId)
|
|
return orderId <= Schedule + 1
|
|
end
|
|
|
|
function XFubenActivityBossSingleManager.IsChallengeUnlockByStageId(stageId)
|
|
local challengeId = XFubenActivityBossSingleConfigs.GetChanllengeIdByStageId(stageId)
|
|
return XFubenActivityBossSingleManager.IsChallengeUnlock(challengeId)
|
|
end
|
|
|
|
function XFubenActivityBossSingleManager.IsChallengePassed(challengeId)
|
|
local orderId = XFubenActivityBossSingleConfigs.GetChallengeOrderId(challengeId)
|
|
return orderId <= Schedule
|
|
end
|
|
|
|
function XFubenActivityBossSingleManager.IsChallengePassedByStageId(stageId)
|
|
local challengeId = XFubenActivityBossSingleConfigs.GetChanllengeIdByStageId(stageId)
|
|
return XFubenActivityBossSingleManager.IsChallengePassed(challengeId)
|
|
end
|
|
|
|
function XFubenActivityBossSingleManager.GetPreChallengeId(sectionId, challengeId)
|
|
local sectionCfg = XFubenActivityBossSingleConfigs.GetSectionCfg(sectionId)
|
|
local orderId = XFubenActivityBossSingleConfigs.GetChallengeOrderId(challengeId)
|
|
return sectionCfg.ChallengeId[orderId - 1]
|
|
end
|
|
|
|
function XFubenActivityBossSingleManager.GetCurSectionId()
|
|
return SectionId
|
|
end
|
|
|
|
function XFubenActivityBossSingleManager.GetFinishCount()
|
|
return Schedule
|
|
end
|
|
|
|
function XFubenActivityBossSingleManager.GetActivityBeginTime()
|
|
return XFubenActivityBossSingleConfigs.GetActivityBeginTime(CurActivityId)
|
|
end
|
|
|
|
function XFubenActivityBossSingleManager.GetFightEndTime()
|
|
return XFubenActivityBossSingleConfigs.GetFightEndTime(CurActivityId)
|
|
end
|
|
|
|
function XFubenActivityBossSingleManager.GetActivityEndTime()
|
|
return XFubenActivityBossSingleConfigs.GetActivityEndTime(CurActivityId)
|
|
end
|
|
|
|
function XFubenActivityBossSingleManager.IsOpen()
|
|
local nowTime = XTime.GetServerNowTimestamp()
|
|
local beginTime = XFubenActivityBossSingleManager.GetActivityBeginTime()
|
|
local endTime = XFubenActivityBossSingleManager.GetActivityEndTime()
|
|
return beginTime <= nowTime and nowTime < endTime and SectionId ~= 0
|
|
end
|
|
|
|
function XFubenActivityBossSingleManager.IsStatusEqualFightEnd()
|
|
local now = XTime.GetServerNowTimestamp()
|
|
local fightEndTime = XFubenActivityBossSingleManager.GetFightEndTime()
|
|
local endTime = XFubenActivityBossSingleManager.GetActivityEndTime()
|
|
return fightEndTime <= now and now < endTime
|
|
end
|
|
|
|
function XFubenActivityBossSingleManager.OnActivityEnd()
|
|
if CS.XFight.IsRunning or XLuaUiManager.IsUiLoad("UiLoading") then
|
|
return
|
|
end
|
|
XUiManager.TipText("ActivityBossSingleOver")
|
|
XLuaUiManager.RunMain()
|
|
end
|
|
|
|
--获取当前活动Id
|
|
function XFubenActivityBossSingleManager.GetCurActivityId()
|
|
return CurActivityId
|
|
end
|
|
|
|
--根据关卡个数获得总星数
|
|
function XFubenActivityBossSingleManager.GetAllStarsCount()
|
|
return 3 * XFubenActivityBossSingleConfigs.GetChallengeCount(SectionId)
|
|
end
|
|
|
|
--获取当前星数
|
|
function XFubenActivityBossSingleManager.GetCurStarsCount()
|
|
local curStatsCount = 0
|
|
|
|
local stageIds = XDataCenter.FubenActivityBossSingleManager.GetSectionStageIdList(SectionId)
|
|
for i = 1, #stageIds do
|
|
curStatsCount = curStatsCount + StageInfos[stageIds[i]].Stars
|
|
end
|
|
|
|
return curStatsCount
|
|
end
|
|
|
|
--获取每个副本的星星信息
|
|
function XFubenActivityBossSingleManager.GetStageStarMap(stageId)
|
|
return StageInfos[stageId].StarsMap
|
|
end
|
|
|
|
--判断当前红点
|
|
function XFubenActivityBossSingleManager.CheckRedPoint()
|
|
local curStarCount = XFubenActivityBossSingleManager.GetCurStarsCount()
|
|
local starRewardTemplates = XFubenActivityBossSingleConfigs.GetStarRewardTemplates()
|
|
local bossSectionRewardIds = XFubenActivityBossSingleConfigs.GetBossSectionRewardIds(SectionId)
|
|
for _, RewardId in pairs(bossSectionRewardIds) do
|
|
if StarRewardIds[RewardId] == nil then
|
|
if curStarCount >= starRewardTemplates[RewardId].RequireStar then
|
|
return true
|
|
end
|
|
end
|
|
end
|
|
return false
|
|
end
|
|
|
|
--判断是不是已经全部领取了
|
|
function XFubenActivityBossSingleManager.CheckIsAllFinish()
|
|
local bossSectionRewardIds = XFubenActivityBossSingleConfigs.GetBossSectionRewardIds(SectionId)
|
|
for _, v in pairs(bossSectionRewardIds) do
|
|
if not StarRewardIds[v] then
|
|
return false
|
|
end
|
|
end
|
|
return true
|
|
end
|
|
|
|
function XFubenActivityBossSingleManager.CheckRewardIsFinish(Id)
|
|
if StarRewardIds[Id] == nil then
|
|
return false
|
|
end
|
|
return true
|
|
end
|
|
|
|
--解析星星数
|
|
local GetStarsCount = function(starsMark)
|
|
local count = (starsMark & 1) + (starsMark & 2 > 0 and 1 or 0) + (starsMark & 4 > 0 and 1 or 0)
|
|
local map = {(starsMark & 1) > 0, (starsMark & 2) > 0, (starsMark & 4) > 0 }
|
|
return count, map
|
|
end
|
|
|
|
function XFubenActivityBossSingleManager.NotifyBossActivityData(data)
|
|
CurActivityId = data.ActivityId
|
|
SectionId = data.SectionId
|
|
Schedule = data.Schedule
|
|
for _, v in pairs(data.StarRewardIds) do
|
|
if StarRewardIds[v] == nil then
|
|
StarRewardIds[v] = v
|
|
end
|
|
end
|
|
|
|
local stageIds = XDataCenter.FubenActivityBossSingleManager.GetSectionStageIdList(SectionId)
|
|
for i = 1, #stageIds do
|
|
local starsMark
|
|
if data.StageStarInfos[i] and data.StageStarInfos[i].StarsMark then
|
|
starsMark = data.StageStarInfos[i].StarsMark
|
|
else
|
|
starsMark = 0
|
|
end
|
|
local stageInfoTab = {}
|
|
stageInfoTab.Stars, stageInfoTab.StarsMap = GetStarsCount(starsMark)
|
|
StageInfos[stageIds[i]] = stageInfoTab
|
|
end
|
|
end
|
|
|
|
function XFubenActivityBossSingleManager.NotifyBossStageStarData(data)
|
|
local stageInfoTab = {}
|
|
stageInfoTab.Stars, stageInfoTab.StarsMap = GetStarsCount(data.StarInfo.StarsMark)
|
|
StageInfos[data.StarInfo.StageId] = stageInfoTab
|
|
end
|
|
|
|
--领奖
|
|
function XFubenActivityBossSingleManager.ReceiveTreasureReward(Id, cb)
|
|
local req = { Id = Id }
|
|
XNetwork.Call(METHOD_NAME.ReceiveTreasureReward, req, function(res)
|
|
if res.Code ~= XCode.Success then
|
|
XUiManager.TipCode(res.Code)
|
|
return
|
|
end
|
|
XFubenActivityBossSingleManager.SyncTreasureStage(Id)
|
|
if cb then
|
|
cb(res.RewardGoodsList)
|
|
end
|
|
end)
|
|
end
|
|
|
|
--同步领奖状态
|
|
function XFubenActivityBossSingleManager.SyncTreasureStage(Id)
|
|
if StarRewardIds[Id] == nil then
|
|
StarRewardIds[Id] = Id
|
|
end
|
|
end
|
|
|
|
return XFubenActivityBossSingleManager
|
|
end
|
|
|
|
XRpc.NotifyBossActivityData = function(data)
|
|
XDataCenter.FubenActivityBossSingleManager.NotifyBossActivityData(data)
|
|
end
|
|
|
|
XRpc.NotifyBossStageStarData = function(data)
|
|
XDataCenter.FubenActivityBossSingleManager.NotifyBossStageStarData(data)
|
|
end |