PGRData/Script/matrix/xmanager/XFubenActivityBossSingleManager.lua

311 lines
No EOL
11 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
XFubenActivityBossSingleManager.RegisterEditBattleProxy()
end
function XFubenActivityBossSingleManager.RegisterEditBattleProxy()
XUiNewRoomSingleProxy.RegisterProxy(XDataCenter.FubenManager.StageType.ActivityBossSingle,
require("XUi/XUiActivityBossSingle/XUiActivityBossSingleNewRoomSingle"))
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
--robot
function XFubenActivityBossSingleManager.GetCanUseRobotIds(activityId, teamList)
local activityId = activityId or XFubenActivityBossSingleManager.GetCurActivityId()
local ids = XFubenActivityBossSingleConfigs.GetGroupCanUseRobotIds(activityId) or {}
table.sort(ids, function(aId, bId)
----已经上阵
local aIsInTeam = XFubenActivityBossSingleManager.CheckInTeamList(aId, teamList)
local bIsInTeam = XFubenActivityBossSingleManager.CheckInTeamList(bId, teamList)
if aIsInTeam ~= bIsInTeam then
return not aIsInTeam
end
--战力排序
local aAbility = XRobotManager.GetRobotAbility(aId)
local bAbility = XRobotManager.GetRobotAbility(bId)
if aAbility ~= bAbility then
return aAbility > bAbility
end
return false
end)
return ids
end
function XFubenActivityBossSingleManager.CheckInTeamList(id,teamList)
if XTool.IsTableEmpty(teamList) then
return false
end
for _, v in pairs(teamList) do
if id == v then
return true
end
end
return false
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
local function GetCookieKeyTeam()
if not XTool.IsNumberValid(CurActivityId) then return end
return string.format("XFubenActivityBossSingleManager_CookieKeyTeam_%d_%d", XPlayer.Id, CurActivityId)
end
-- 保存编队信息
function XFubenActivityBossSingleManager.SaveTeamLocal(curTeam)
XSaveTool.SaveData(GetCookieKeyTeam(), curTeam)
end
-- 读取本地编队信息
function XFubenActivityBossSingleManager.LoadTeamLocal()
local team = XSaveTool.GetData(GetCookieKeyTeam()) or XDataCenter.TeamManager.EmptyTeam
return XTool.Clone(team)
end
return XFubenActivityBossSingleManager
end
XRpc.NotifyBossActivityData = function(data)
XDataCenter.FubenActivityBossSingleManager.NotifyBossActivityData(data)
end
XRpc.NotifyBossStageStarData = function(data)
XDataCenter.FubenActivityBossSingleManager.NotifyBossStageStarData(data)
end