2542 lines
100 KiB
Lua
2542 lines
100 KiB
Lua
|
TaskType = {
|
|||
|
Story = 1, -- 普通/剧情
|
|||
|
Daily = 2, -- 每日
|
|||
|
Weekly = 3,-- 每周
|
|||
|
Achievement = 4, -- 成就
|
|||
|
Activity = 5, -- 活动
|
|||
|
OffLine = 6, -- 下线(未使用)
|
|||
|
NewPlayer = 7, -- 新手目标
|
|||
|
CharacterStory = 8, -- 角色剧情(未使用)
|
|||
|
Bfrt = 9, -- 据点任务(未使用)
|
|||
|
ArenaChallenge = 10,
|
|||
|
TimeLimit = 11, --限时任务
|
|||
|
DormNormal = 12, --宿舍普通
|
|||
|
DormDaily = 13, --宿舍日常
|
|||
|
BossSingle = 14, -- 单挑boss(未使用)
|
|||
|
BabelTower = 15, --巴别塔任务
|
|||
|
RogueLike = 16, --爬塔玩法
|
|||
|
Regression = 17, --回归活动
|
|||
|
GuildMainly = 18, --公会主线
|
|||
|
GuildDaily = 19, -- 公会日常
|
|||
|
ArenaOnlineWeekly = 20, -- 区域联机
|
|||
|
SpecialTrain = 21, -- 特训关日常任务(未使用)
|
|||
|
InfestorWeekly = 22, -- 异聚迷宫
|
|||
|
GuildWeekly = 23, --工会周长
|
|||
|
BossOnLine = 24, --日服联机boss
|
|||
|
WorldBoss = 25, --世界boss
|
|||
|
Expedition = 26, -- 远征自走棋(未使用)
|
|||
|
RpgTower = 27, --兵法蓝图
|
|||
|
MentorShipGrow = 28, -- 师徒成长任务
|
|||
|
MentorShipGraduate = 29, -- 师徒毕业挑战
|
|||
|
MentorShipWeekly = 30, -- 师徒每周任务
|
|||
|
NieR = 31, --尼尔玩法
|
|||
|
Pokemon = 32, --口袋战双
|
|||
|
ZhouMu = 39, --多周目
|
|||
|
ChristmasTree = 40, --圣诞树(未使用)
|
|||
|
ChessPursuit = 41, --追击玩法(未使用)
|
|||
|
Couplet = 42, --春节对联小游戏
|
|||
|
SimulatedCombat = 43, --模拟作战
|
|||
|
WhiteValentine = 44, --白色情人节
|
|||
|
MoeWarDaily = 45, -- 萌战每日任务
|
|||
|
MoeWarNormal = 46, -- 萌战累计任务
|
|||
|
FingerGuessing = 47, -- 猜拳小游戏
|
|||
|
PokerGuessing = 48, --翻牌猜大小
|
|||
|
Reform = 49, -- 改造玩法
|
|||
|
PokerGuessingCollection = 50, --翻牌猜大小收藏品任务
|
|||
|
Passport = 51, --通行证任务
|
|||
|
CoupleCombat = 52, -- 双人玩法
|
|||
|
LivWarmSoundsActivity = 53, -- 丽芙预热音频解密任务
|
|||
|
LivWarmExtActivity = 54, -- 丽芙预热宣发任务
|
|||
|
Maverick = 56, -- 二周年射击玩法
|
|||
|
Doomsday = 57, -- 末日生存
|
|||
|
PivotCombat = 62, --SP区域作战
|
|||
|
BodyCombineGame = 63, -- 接头霸王
|
|||
|
GuildWar = 64, --公会战任务
|
|||
|
WeekChallenge = 66, -- 周挑战
|
|||
|
DoubleTower = 67, --动作塔防
|
|||
|
GoldenMiner = 68, --黄金矿工
|
|||
|
TaikoMaster = 69, --音游
|
|||
|
SuperSmash = 70, --超限乱斗(2期时新增)
|
|||
|
}
|
|||
|
|
|||
|
XTaskManagerCreator = function()
|
|||
|
local tableInsert = table.insert
|
|||
|
local tableSort = table.sort
|
|||
|
|
|||
|
local Json = require("XCommon/Json")
|
|||
|
local WeekTaskRefreshId = 10001
|
|||
|
local WeekTaskEpochTime = 0
|
|||
|
local WeekTaskRefreshDay = 1
|
|||
|
|
|||
|
local XTaskManager = {}
|
|||
|
|
|||
|
local ITEM_NEWBIE_PROGRESS_ID = CS.XGame.ClientConfig:GetInt("NewPlayerTaskExpId")
|
|||
|
|
|||
|
XTaskManager.TaskType = TaskType
|
|||
|
XTaskManager.OperationState = {
|
|||
|
DoWork = 1,
|
|||
|
GetReward = 2,
|
|||
|
GetedReward = 3
|
|||
|
}
|
|||
|
|
|||
|
XTaskManager.ActiveRewardType = {
|
|||
|
Daily = 1,
|
|||
|
Weekly = 2
|
|||
|
}
|
|||
|
|
|||
|
XTaskManager.AchvType = {
|
|||
|
Fight = 1,
|
|||
|
Collect = 2,
|
|||
|
Social = 3,
|
|||
|
Other = 4,
|
|||
|
}
|
|||
|
|
|||
|
XTaskManager.TaskState = {
|
|||
|
InActive = -1, --未激活
|
|||
|
Standby = 0, --待命
|
|||
|
Active = 1, --已激活
|
|||
|
Accepted = 2, --已接受
|
|||
|
Achieved = 3, --完成(未领奖励)
|
|||
|
Finish = 4, --结束(领取奖励)
|
|||
|
Invalid = 5, --已失效/过期
|
|||
|
}
|
|||
|
|
|||
|
XTaskManager.NewPlayerTaskGroupState = {
|
|||
|
Lock = 1, --未解锁
|
|||
|
AllTodo = 2, --待完成
|
|||
|
HasAward = 3, --有奖励没领取
|
|||
|
AllFinish = 4, --全都结束
|
|||
|
}
|
|||
|
|
|||
|
XTaskManager.CourseType = {
|
|||
|
None = 0, -- 无状态
|
|||
|
Reward = 1, -- 有经历节点
|
|||
|
Function = 2, -- 有功能开启节点
|
|||
|
Normal = 3, -- 普通节点
|
|||
|
}
|
|||
|
|
|||
|
XTaskManager.UpdateViewCallback = nil
|
|||
|
|
|||
|
local CourseInfos = {} -- {key = ChapterId, Value = {LasetId, NextChapterId, Courses = {stageId, type, nextType......}}}
|
|||
|
local CourseChapterRewards = {}
|
|||
|
|
|||
|
local TaskDataGroup = {}
|
|||
|
|
|||
|
-- 创建新系统或者优化原有系统时请使用新的通用任务接口
|
|||
|
-------------------------------------------------------
|
|||
|
local CourseData = {}
|
|||
|
local TotalTaskData = {}
|
|||
|
local StoryTaskData = {}
|
|||
|
local DailyTaskData = {}
|
|||
|
local WeeklyTaskData = {}
|
|||
|
local ActivityTaskData = {}
|
|||
|
local NewPlayerTaskData = {}
|
|||
|
local AchvTaskData = {}
|
|||
|
local ArenaTaskData = {}
|
|||
|
local TimeLimitTaskData = {}
|
|||
|
local ArenaOnlineWeeklyTaskData = {}
|
|||
|
local InfestorWeeklyTaskData = {}
|
|||
|
local BossOnlineTaskData = {}
|
|||
|
local StoryGroupTaskData = {}
|
|||
|
local DormStoryGroupTaskData = {}
|
|||
|
local DormDailyGroupTaskData = {}
|
|||
|
local FinishedTasks = {}
|
|||
|
|
|||
|
-- 宿舍任务
|
|||
|
local DormNormalTaskData = {}
|
|||
|
local DormDailyTaskData = {}
|
|||
|
|
|||
|
local BabelTowerTaskData = {}
|
|||
|
local RogueLikeTaskData = {}
|
|||
|
local WorldBossTaskData = {}
|
|||
|
|
|||
|
--师徒任务
|
|||
|
local MentorGrowTaskData = {}
|
|||
|
local MentorGraduateTaskData = {}
|
|||
|
local MentorWeeklyTaskData = {}
|
|||
|
|
|||
|
local RpgTowerTaskData = {}
|
|||
|
local WhiteValentineTaskData = {}
|
|||
|
local FingerGuessingTaskData = {}
|
|||
|
local PokerGuessingTaskData = {}
|
|||
|
local GuildDailyTaskData = {}
|
|||
|
local GuildMainlyTaskData = {}
|
|||
|
local GuildWeeklyTaskData = {}
|
|||
|
local ZhouMuTaskData = {}
|
|||
|
|
|||
|
local RegressionTaskData = {}
|
|||
|
local LinkTaskTimeDict = {}
|
|||
|
local NieRTaskData = {}
|
|||
|
|
|||
|
local PokemonTaskData = {}
|
|||
|
-- 小游戏
|
|||
|
local CoupletTaskData = {}
|
|||
|
local SimulatedCombatTaskData = {}
|
|||
|
|
|||
|
local MoeWarDailyTaskData = {}
|
|||
|
local MoeWarNormalTaskData = {}
|
|||
|
|
|||
|
--通行证
|
|||
|
local PassportTaskData = {}
|
|||
|
|
|||
|
--音频解密
|
|||
|
local LivWarmSoundsActivityTaskData = {}
|
|||
|
|
|||
|
|
|||
|
-------------------------------------------------------
|
|||
|
|
|||
|
local NewbieActivenessRecord = {}
|
|||
|
XTaskManager.NewPlayerLastSelectTab = "NewPlayerHint_LastSelectTab"
|
|||
|
XTaskManager.TaskLastSelectTab = "TaskHint_LastSelectTab"
|
|||
|
XTaskManager.DormTaskLastSelectTab = "DormTaskHint_LastSelectTab"
|
|||
|
XTaskManager.NewPLayerTaskFirstTalk = "NewPlayerHint_FirstTalk"
|
|||
|
|
|||
|
local RegressionTaskRedPointCount = 0
|
|||
|
local RegressionTaskCanGetDic = {}
|
|||
|
local RegressionTaskTypeToRedPointCountDic = {}
|
|||
|
|
|||
|
function XTaskManager.Init()
|
|||
|
XEventManager.AddEventListener(XEventId.EVENT_FUBEN_STAGE_SYNC, XTaskManager.SetCourseOnSyncStageData)
|
|||
|
|
|||
|
local alarmClockData = XTaskConfig.GetAlarmClockById(WeekTaskRefreshId)
|
|||
|
local jsonFormatData = Json.decode(alarmClockData.DayOfWeek)
|
|||
|
WeekTaskEpochTime = alarmClockData.EpochTime
|
|||
|
WeekTaskRefreshDay = jsonFormatData[1]
|
|||
|
end
|
|||
|
|
|||
|
function XTaskManager.InitTaskData(data)
|
|||
|
local taskdata = data.Tasks
|
|||
|
FinishedTasks = {}
|
|||
|
for _, v in pairs(data.FinishedTasks or {}) do
|
|||
|
FinishedTasks[v] = true
|
|||
|
end
|
|||
|
|
|||
|
if data.TaskLimitIdActiveInfos then
|
|||
|
for _, v in pairs(data.TaskLimitIdActiveInfos) do
|
|||
|
LinkTaskTimeDict[v.TaskLimitId] = v.ActiveTime
|
|||
|
XEventManager.DispatchEvent(XEventId.EVENT_ACTIVITY_INFO_UPDATE)
|
|||
|
end
|
|||
|
end
|
|||
|
NewbieActivenessRecord = data.NewPlayerRewardRecord
|
|||
|
XTaskManager.InitCourseData(data.Course)
|
|||
|
|
|||
|
for _, value in pairs(taskdata) do
|
|||
|
TotalTaskData[value.Id] = value
|
|||
|
end
|
|||
|
local taskTemplate = XTaskConfig.GetTaskTemplate()
|
|||
|
for k, v in pairs(taskTemplate) do
|
|||
|
if not TotalTaskData[k] and v.Type ~= XTaskManager.TaskType.Daily and v.Type ~= XTaskManager.TaskType.Weekly and v.Type ~= XTaskManager.TaskType.InfestorWeekly then
|
|||
|
TotalTaskData[k] = {}
|
|||
|
TotalTaskData[k].Id = k
|
|||
|
TotalTaskData[k].Schedule = {}
|
|||
|
local conditions = v.Condition
|
|||
|
|
|||
|
for _, var in ipairs(conditions) do
|
|||
|
if FinishedTasks and FinishedTasks[k] then
|
|||
|
tableInsert(TotalTaskData[k].Schedule, { Id = var, Value = v.Result })
|
|||
|
TotalTaskData[k].State = XTaskManager.TaskState.Finish
|
|||
|
else
|
|||
|
tableInsert(TotalTaskData[k].Schedule, { Id = var, Value = 0 })
|
|||
|
TotalTaskData[k].State = XTaskManager.TaskState.Active
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
local regressionTaskType
|
|||
|
for k, v in pairs(TotalTaskData) do
|
|||
|
local taskType = taskTemplate[k] and taskTemplate[k].Type or nil
|
|||
|
if (taskTemplate[k] == nil) then
|
|||
|
XLog.Warning("服务端数据异常 不存在任务配置id:", k)
|
|||
|
-- 创建新系统或者优化原有系统时请使用新的通用任务接口
|
|||
|
-------------------------------------------------------
|
|||
|
elseif taskType == XTaskManager.TaskType.Story then
|
|||
|
StoryTaskData[k] = v
|
|||
|
elseif taskType == XTaskManager.TaskType.Daily then
|
|||
|
DailyTaskData[k] = v
|
|||
|
elseif taskType == XTaskManager.TaskType.Weekly then
|
|||
|
WeeklyTaskData[k] = v
|
|||
|
elseif taskType == XTaskManager.TaskType.Activity then
|
|||
|
ActivityTaskData[k] = v
|
|||
|
elseif taskType == XTaskManager.TaskType.NewPlayer then
|
|||
|
NewPlayerTaskData[k] = v
|
|||
|
elseif taskType == XTaskManager.TaskType.Achievement then
|
|||
|
AchvTaskData[k] = v
|
|||
|
elseif taskType == XTaskManager.TaskType.ArenaChallenge then
|
|||
|
ArenaTaskData[k] = v
|
|||
|
elseif taskType == XTaskManager.TaskType.TimeLimit then
|
|||
|
TimeLimitTaskData[k] = v
|
|||
|
elseif taskType == XTaskManager.TaskType.DormNormal then
|
|||
|
DormNormalTaskData[k] = v
|
|||
|
elseif taskType == XTaskManager.TaskType.DormDaily then
|
|||
|
DormDailyTaskData[k] = v
|
|||
|
elseif taskType == XTaskManager.TaskType.BabelTower then
|
|||
|
BabelTowerTaskData[k] = v
|
|||
|
elseif taskType == XTaskManager.TaskType.RogueLike then
|
|||
|
RogueLikeTaskData[k] = v
|
|||
|
elseif taskType == XTaskManager.TaskType.WorldBoss then
|
|||
|
WorldBossTaskData[k] = v
|
|||
|
elseif taskType == XTaskManager.TaskType.RpgTower then
|
|||
|
RpgTowerTaskData[k] = v
|
|||
|
elseif taskType == XTaskManager.TaskType.WhiteValentine then
|
|||
|
WhiteValentineTaskData[k] = v
|
|||
|
elseif taskType == XTaskManager.TaskType.FingerGuessing then
|
|||
|
FingerGuessingTaskData[k] = v
|
|||
|
elseif taskType == XTaskManager.TaskType.ZhouMu then
|
|||
|
ZhouMuTaskData[k] = v
|
|||
|
elseif taskType == XTaskManager.TaskType.GuildDaily then
|
|||
|
GuildDailyTaskData[k] = v
|
|||
|
elseif taskType == XTaskManager.TaskType.GuildMainly then
|
|||
|
GuildMainlyTaskData[k] = v
|
|||
|
elseif taskType == XTaskManager.TaskType.GuildWeekly then
|
|||
|
GuildWeeklyTaskData[k] = v
|
|||
|
elseif taskType == XTaskManager.TaskType.MentorShipGrow then
|
|||
|
MentorGrowTaskData[k] = v
|
|||
|
elseif taskType == XTaskManager.TaskType.MentorShipGraduate then
|
|||
|
MentorGraduateTaskData[k] = v
|
|||
|
elseif taskType == XTaskManager.TaskType.MentorShipWeekly then
|
|||
|
MentorWeeklyTaskData[k] = v
|
|||
|
elseif taskType == XTaskManager.TaskType.Regression then
|
|||
|
regressionTaskType = XRegressionConfigs.GetTaskTypeById(k)
|
|||
|
RegressionTaskData[k] = v
|
|||
|
if RegressionTaskCanGetDic[k] then
|
|||
|
if v.State ~= XDataCenter.TaskManager.TaskState.Achieved then
|
|||
|
RegressionTaskTypeToRedPointCountDic[regressionTaskType] = RegressionTaskTypeToRedPointCountDic[regressionTaskType] - 1
|
|||
|
RegressionTaskRedPointCount = RegressionTaskRedPointCount - 1
|
|||
|
RegressionTaskCanGetDic[k] = nil
|
|||
|
end
|
|||
|
else
|
|||
|
if v.State == XDataCenter.TaskManager.TaskState.Achieved then
|
|||
|
RegressionTaskCanGetDic[k] = true
|
|||
|
RegressionTaskTypeToRedPointCountDic[regressionTaskType] = RegressionTaskTypeToRedPointCountDic[regressionTaskType] or 0
|
|||
|
RegressionTaskTypeToRedPointCountDic[regressionTaskType] = RegressionTaskTypeToRedPointCountDic[regressionTaskType] + 1
|
|||
|
RegressionTaskRedPointCount = RegressionTaskRedPointCount + 1
|
|||
|
end
|
|||
|
end
|
|||
|
elseif taskType == XTaskManager.TaskType.ArenaOnlineWeekly then
|
|||
|
ArenaOnlineWeeklyTaskData[k] = v
|
|||
|
elseif taskType == XTaskManager.TaskType.InfestorWeekly then
|
|||
|
InfestorWeeklyTaskData[k] = v
|
|||
|
elseif taskType == XTaskManager.TaskType.NieR then
|
|||
|
NieRTaskData[k] = v
|
|||
|
elseif taskType == XTaskManager.TaskType.Pokemon then
|
|||
|
PokemonTaskData[k] = v
|
|||
|
elseif taskType == XTaskManager.TaskType.Couplet then
|
|||
|
CoupletTaskData[k] = v
|
|||
|
elseif taskType == XTaskManager.TaskType.SimulatedCombat then
|
|||
|
SimulatedCombatTaskData[k] = v
|
|||
|
elseif taskType == XTaskManager.TaskType.MoeWarDaily then
|
|||
|
MoeWarDailyTaskData[k] = v
|
|||
|
elseif taskType == XTaskManager.TaskType.MoeWarNormal then
|
|||
|
MoeWarNormalTaskData[k] = v
|
|||
|
elseif taskType == XTaskManager.TaskType.PokerGuessing or taskType == XTaskManager.TaskType.PokerGuessingCollection then
|
|||
|
PokerGuessingTaskData[k] = v
|
|||
|
elseif taskType == XTaskManager.TaskType.Passport then
|
|||
|
PassportTaskData[k] = v
|
|||
|
elseif taskType == XTaskManager.TaskType.LivWarmSoundsActivity then
|
|||
|
LivWarmSoundsActivityTaskData[k] = v
|
|||
|
elseif taskType == XTaskManager.TaskType.BossOnLine then
|
|||
|
BossOnlineTaskData[k] = v
|
|||
|
-------------------------------------------------------
|
|||
|
elseif taskType and taskType ~= XTaskManager.TaskType.OffLine then
|
|||
|
-- XLog.Warning(taskType, k, v, "TaskDataGroup",TaskDataGroup)
|
|||
|
if not TaskDataGroup[taskType] then
|
|||
|
TaskDataGroup[taskType] = {}
|
|||
|
end
|
|||
|
TaskDataGroup[taskType][k] = v
|
|||
|
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
XEventManager.DispatchEvent(XEventId.EVENT_TASK_SYNC)
|
|||
|
XEventManager.DispatchEvent(XEventId.EVENT_NOTICE_TASKINITFINISHED)--上面那个事件触发太频繁,这里只需要监听初始完成
|
|||
|
CsXGameEventManager.Instance:Notify(XEventId.EVENT_TASK_SYNC)
|
|||
|
end
|
|||
|
|
|||
|
function XTaskManager.InitCourseInfos()
|
|||
|
local courseChapterRewardTemp = {}
|
|||
|
local courseTemplate = XTaskConfig.GetCourseTemplate()
|
|||
|
for k, v in pairs(courseTemplate) do
|
|||
|
local stageInfo = XDataCenter.FubenManager.GetStageInfo(v.StageId)
|
|||
|
local stageCfg = XDataCenter.FubenManager.GetStageCfg(v.StageId)
|
|||
|
if not stageInfo or not stageCfg then
|
|||
|
local path = XTaskConfig.GetTaskCoursePath()
|
|||
|
XLog.ErrorTableDataNotFound("XTaskManager.InitCourseInfos", "StageId", path, "CourseId", tostring(k))
|
|||
|
return
|
|||
|
end
|
|||
|
|
|||
|
local SetType = function(cfg)
|
|||
|
if cfg.RewardId and cfg.RewardId > 0 then
|
|||
|
return XTaskManager.CourseType.Reward
|
|||
|
elseif cfg.Tip and cfg.Tip ~= "" then
|
|||
|
return XTaskManager.CourseType.Function
|
|||
|
else
|
|||
|
return XTaskManager.CourseType.Normal
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
local SetCourse = function(lastStageId)
|
|||
|
local type = SetType(v)
|
|||
|
|
|||
|
local nextType = XTaskManager.CourseType.None
|
|||
|
if stageInfo.NextStageId and courseTemplate[stageInfo.NextStageId] then
|
|||
|
local nextCfg = courseTemplate[stageInfo.NextStageId]
|
|||
|
nextType = SetType(nextCfg)
|
|||
|
end
|
|||
|
|
|||
|
local chapter = XDataCenter.FubenMainLineManager.GetChapterCfg(stageInfo.ChapterId)
|
|||
|
local name = chapter.OrderId .. "-" .. stageCfg.OrderId
|
|||
|
|
|||
|
-- 寻找还没有领奖励的关卡
|
|||
|
if type == XTaskManager.CourseType.Reward or lastStageId == v.StageId then
|
|||
|
if XTaskManager.CheckCourseCanGet(v.StageId) then
|
|||
|
if courseChapterRewardTemp[stageInfo.ChapterId] then
|
|||
|
if type == XTaskManager.CourseType.Reward then
|
|||
|
tableInsert(courseChapterRewardTemp[stageInfo.ChapterId].stageIds, v.StageId)
|
|||
|
end
|
|||
|
|
|||
|
local stageInfo1 = XDataCenter.FubenManager.GetStageInfo(lastStageId)
|
|||
|
if lastStageId == v.StageId and not stageInfo1.Passed then
|
|||
|
courseChapterRewardTemp[stageInfo1.ChapterId].LastStageId = v.StageId
|
|||
|
end
|
|||
|
else
|
|||
|
if type == XTaskManager.CourseType.Reward then
|
|||
|
courseChapterRewardTemp[stageInfo.ChapterId] = {}
|
|||
|
courseChapterRewardTemp[stageInfo.ChapterId].ChapterId = stageInfo.ChapterId
|
|||
|
courseChapterRewardTemp[stageInfo.ChapterId].OrderId = chapter.OrderId
|
|||
|
courseChapterRewardTemp[stageInfo.ChapterId].stageIds = {}
|
|||
|
tableInsert(courseChapterRewardTemp[stageInfo.ChapterId].stageIds, v.StageId)
|
|||
|
end
|
|||
|
|
|||
|
local stageInfo2 = XDataCenter.FubenManager.GetStageInfo(lastStageId)
|
|||
|
if lastStageId == v.StageId and not stageInfo2.Passed then
|
|||
|
if courseChapterRewardTemp[stageInfo2.ChapterId] then
|
|||
|
courseChapterRewardTemp[stageInfo2.ChapterId].LastStageId = v.StageId
|
|||
|
else
|
|||
|
courseChapterRewardTemp[stageInfo2.ChapterId] = {}
|
|||
|
courseChapterRewardTemp[stageInfo2.ChapterId].ChapterId = stageInfo2.ChapterId
|
|||
|
courseChapterRewardTemp[stageInfo2.ChapterId].OrderId = chapter.OrderId
|
|||
|
courseChapterRewardTemp[stageInfo2.ChapterId].stageIds = {}
|
|||
|
courseChapterRewardTemp[stageInfo2.ChapterId].LastStageId = v.StageId
|
|||
|
end
|
|||
|
end
|
|||
|
end
|
|||
|
end
|
|||
|
end
|
|||
|
-- 寻找还没有领奖励的关卡
|
|||
|
return {
|
|||
|
CouresType = type,
|
|||
|
NextCouresType = nextType,
|
|||
|
StageId = v.StageId,
|
|||
|
Tip = v.Tip,
|
|||
|
TipEn = v.TipEn,
|
|||
|
RewardId = v.RewardId,
|
|||
|
ShowId = v.ShowId,
|
|||
|
OrderId = stageCfg.OrderId,
|
|||
|
Name = name,
|
|||
|
PreStageId = stageCfg.PreStageId
|
|||
|
}
|
|||
|
end
|
|||
|
|
|||
|
if CourseInfos[stageInfo.ChapterId] then
|
|||
|
local course = SetCourse(CourseInfos[stageInfo.ChapterId].LastStageId)
|
|||
|
tableInsert(CourseInfos[stageInfo.ChapterId].Courses, course)
|
|||
|
else
|
|||
|
local nextChapterId = XDataCenter.FubenMainLineManager.GetNextChapterId(stageInfo.ChapterId)
|
|||
|
local lastStageId = XDataCenter.FubenMainLineManager.GetLastStageId(stageInfo.ChapterId)
|
|||
|
local isStageIdTableEmpty = XDataCenter.FubenMainLineManager.IsStageIdTableEmpty(stageInfo.ChapterId)
|
|||
|
if not isStageIdTableEmpty then
|
|||
|
CourseInfos[stageInfo.ChapterId] = {}
|
|||
|
CourseInfos[stageInfo.ChapterId].Courses = {}
|
|||
|
CourseInfos[stageInfo.ChapterId].NextChapterId = nextChapterId
|
|||
|
CourseInfos[stageInfo.ChapterId].LastStageId = lastStageId
|
|||
|
local course = SetCourse(lastStageId)
|
|||
|
tableInsert(CourseInfos[stageInfo.ChapterId].Courses, course)
|
|||
|
end
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
local needk
|
|||
|
for k, v in pairs(CourseInfos) do
|
|||
|
if not needk or needk < k then
|
|||
|
needk = k
|
|||
|
end
|
|||
|
tableSort(v.Courses, function(a, b)
|
|||
|
return a.OrderId < b.OrderId
|
|||
|
end)
|
|||
|
end
|
|||
|
|
|||
|
for _, v in pairs(courseChapterRewardTemp) do
|
|||
|
tableSort(v.stageIds, function(a, b)
|
|||
|
return a < b
|
|||
|
end)
|
|||
|
tableInsert(CourseChapterRewards, v)
|
|||
|
end
|
|||
|
|
|||
|
tableSort(CourseChapterRewards, function(a, b)
|
|||
|
return a.OrderId < b.OrderId
|
|||
|
end)
|
|||
|
end
|
|||
|
|
|||
|
function XTaskManager.InitCourseData(coursedata)
|
|||
|
CourseData = {}
|
|||
|
CourseInfos = {}
|
|||
|
CourseChapterRewards = {}
|
|||
|
|
|||
|
if coursedata then
|
|||
|
XTool.LoopCollection(coursedata, function(key)
|
|||
|
CourseData[key] = key
|
|||
|
end)
|
|||
|
end
|
|||
|
XTaskManager.InitCourseInfos()
|
|||
|
end
|
|||
|
|
|||
|
function XTaskManager.SetCourseData(stageId)
|
|||
|
local allRewardGet = false
|
|||
|
if not CourseData[stageId] then
|
|||
|
CourseData[stageId] = stageId
|
|||
|
|
|||
|
--移除 CourseChapterRewards 里的Id,并判断是否领取完
|
|||
|
local remov_stage_i = -1
|
|||
|
local remov_stage_j = -1
|
|||
|
local remov_chapter_i = -1
|
|||
|
for i = 1, #CourseChapterRewards do
|
|||
|
for j = 1, #CourseChapterRewards[i].stageIds do
|
|||
|
if CourseChapterRewards[i].stageIds[j] == stageId then
|
|||
|
remov_stage_i = i
|
|||
|
remov_stage_j = j
|
|||
|
if #CourseChapterRewards[i].stageIds <= 1 then
|
|||
|
local lastId = CourseChapterRewards[i].LastStageId
|
|||
|
local stageInfo = XDataCenter.FubenManager.GetStageInfo(lastId)
|
|||
|
if (stageInfo and stageInfo.Passed) or not lastId then
|
|||
|
remov_chapter_i = i
|
|||
|
end
|
|||
|
end
|
|||
|
break
|
|||
|
end
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
if remov_stage_i > 0 and remov_stage_j > 0 then
|
|||
|
table.remove(CourseChapterRewards[remov_stage_i].stageIds, remov_stage_j)
|
|||
|
end
|
|||
|
|
|||
|
if remov_chapter_i > 0 then
|
|||
|
table.remove(CourseChapterRewards, remov_chapter_i)
|
|||
|
allRewardGet = true
|
|||
|
end
|
|||
|
end
|
|||
|
return allRewardGet
|
|||
|
end
|
|||
|
|
|||
|
--判断是否有进度
|
|||
|
function XTaskManager.CheckTaskHasSchedule(task)
|
|||
|
local hasSchedule = false
|
|||
|
XTool.LoopMap(task.Schedule, function(_, pair)
|
|||
|
if pair.Value > 0 then
|
|||
|
hasSchedule = true
|
|||
|
end
|
|||
|
end)
|
|||
|
|
|||
|
return hasSchedule
|
|||
|
end
|
|||
|
|
|||
|
function XTaskManager.CheckCourseCanGet(stageId)
|
|||
|
if CourseData[stageId] then
|
|||
|
return false
|
|||
|
else
|
|||
|
return true
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
function XTaskManager.GetCourseInfo(chapterId)
|
|||
|
return CourseInfos[chapterId]
|
|||
|
end
|
|||
|
|
|||
|
function XTaskManager.GetCourseCurChapterId()
|
|||
|
if not CourseChapterRewards or #CourseChapterRewards <= 0 then
|
|||
|
return nil
|
|||
|
end
|
|||
|
return CourseChapterRewards[1].ChapterId
|
|||
|
end
|
|||
|
|
|||
|
function XTaskManager.SetCourseOnSyncStageData(stageId)
|
|||
|
local remov_chapter_i = -1
|
|||
|
for i = 1, #CourseChapterRewards do
|
|||
|
local lastId = CourseChapterRewards[i].LastStageId
|
|||
|
local stageInfo = XDataCenter.FubenManager.GetStageInfo(lastId)
|
|||
|
if #CourseChapterRewards[i].stageIds <= 0 and lastId == stageId and stageInfo.Passed then
|
|||
|
remov_chapter_i = i
|
|||
|
break
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
if remov_chapter_i > 0 then
|
|||
|
table.remove(CourseChapterRewards, remov_chapter_i)
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
function XTaskManager.GetCourseCurRewardIndex(curChapterId)
|
|||
|
if not CourseChapterRewards or #CourseChapterRewards <= 0 then
|
|||
|
return nil
|
|||
|
end
|
|||
|
|
|||
|
if not CourseChapterRewards[1].stageIds[1] and #CourseChapterRewards[1].stageIds <= 0 then
|
|||
|
return nil
|
|||
|
end
|
|||
|
|
|||
|
local stageId = CourseChapterRewards[1].stageIds[1]
|
|||
|
local stageInfo = XDataCenter.FubenManager.GetStageInfo(stageId)
|
|||
|
if not stageInfo.Passed then
|
|||
|
return nil
|
|||
|
end
|
|||
|
local courses = CourseInfos[curChapterId].Courses
|
|||
|
for i = 1, #courses do
|
|||
|
if stageId == courses[i].StageId then
|
|||
|
return i
|
|||
|
end
|
|||
|
end
|
|||
|
return nil
|
|||
|
end
|
|||
|
|
|||
|
function XTaskManager.GetTaskDataById(taskid)
|
|||
|
return TotalTaskData[taskid]
|
|||
|
end
|
|||
|
|
|||
|
function XTaskManager.IsTaskFinished(taskId)
|
|||
|
return FinishedTasks[taskId]
|
|||
|
end
|
|||
|
|
|||
|
local function CheckTask(task)
|
|||
|
if not task then return false end
|
|||
|
|
|||
|
local template = XTaskConfig.GetTaskTemplate()[task.Id]
|
|||
|
|
|||
|
-- startTime限制
|
|||
|
if template.StartTime ~= nil and template.StartTime ~= "" then
|
|||
|
local now = XTime.GetServerNowTimestamp()
|
|||
|
local startTime = XTime.ParseToTimestamp(template.StartTime)
|
|||
|
if startTime and startTime > now then return false end
|
|||
|
end
|
|||
|
|
|||
|
-- showCondition限制
|
|||
|
if template.ShowCondition ~= nil and template.ShowCondition ~= 0 then
|
|||
|
-- 不满足返回false
|
|||
|
if not XConditionManager.CheckCondition(template.ShowCondition) then
|
|||
|
return false
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
local preId = template and template.ShowAfterTaskId or -1
|
|||
|
if preId > 0 then
|
|||
|
local preTask = TotalTaskData[preId]
|
|||
|
|
|||
|
if preTask then
|
|||
|
if preTask.State ~= XTaskManager.TaskState.Finish and preTask.State ~= XTaskManager.TaskState.Invalid then
|
|||
|
return false
|
|||
|
end
|
|||
|
else
|
|||
|
if FinishedTasks[preId] then
|
|||
|
return true
|
|||
|
end
|
|||
|
return false
|
|||
|
end
|
|||
|
end
|
|||
|
return true
|
|||
|
end
|
|||
|
|
|||
|
local function State2Num(state)
|
|||
|
if state == XTaskManager.TaskState.Achieved then
|
|||
|
return 1
|
|||
|
end
|
|||
|
if state == XTaskManager.TaskState.Finish then
|
|||
|
return -1
|
|||
|
end
|
|||
|
return 0
|
|||
|
end
|
|||
|
|
|||
|
local function CompareState(stateA, stateB)
|
|||
|
if stateA == stateB then
|
|||
|
return 0
|
|||
|
end
|
|||
|
local a = State2Num(stateA)
|
|||
|
local b = State2Num(stateB)
|
|||
|
if a > b then return 1 end
|
|||
|
if a < b then return -1 end
|
|||
|
return 0
|
|||
|
end
|
|||
|
|
|||
|
local function GetTaskList(tasks)
|
|||
|
local list = {}
|
|||
|
local type
|
|||
|
local taskTemplate = XTaskConfig.GetTaskTemplate()
|
|||
|
for _, task in pairs(tasks) do
|
|||
|
type = taskTemplate[task.Id].Type
|
|||
|
break
|
|||
|
end
|
|||
|
if type == XTaskManager.TaskType.Achievement
|
|||
|
or type == XTaskManager.TaskType.ArenaChallenge
|
|||
|
or type == XTaskManager.TaskType.Regression
|
|||
|
or type == XTaskManager.TaskType.NieR
|
|||
|
or type == XTaskManager.TaskType.MoeWarDaily
|
|||
|
or type == XTaskManager.TaskType.MoeWarNormal
|
|||
|
or type == XTaskManager.TaskType.PokerGuessing
|
|||
|
or type == XTaskManager.TaskType.LivWarmSoundsActivity
|
|||
|
or type == XTaskManager.TaskType.LivWarmExtActivity then
|
|||
|
for _, task in pairs(tasks) do
|
|||
|
if CheckTask(task) then
|
|||
|
tableInsert(list, task)
|
|||
|
end
|
|||
|
end
|
|||
|
else
|
|||
|
for _, task in pairs(tasks) do
|
|||
|
if task.State ~= XTaskManager.TaskState.Finish and task.State ~= XTaskManager.TaskState.Invalid then
|
|||
|
if CheckTask(task) then
|
|||
|
tableInsert(list, task)
|
|||
|
end
|
|||
|
end
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
tableSort(list, function(a, b)
|
|||
|
local pa, pb = taskTemplate[a.Id].Priority, taskTemplate[b.Id].Priority
|
|||
|
local stateA = TotalTaskData[a.Id].State
|
|||
|
local stateB = TotalTaskData[b.Id].State
|
|||
|
local compareResult = CompareState(stateA, stateB)
|
|||
|
if compareResult == 0 then
|
|||
|
if pa ~= pb then
|
|||
|
return pa > pb
|
|||
|
else
|
|||
|
return a.Id > b.Id
|
|||
|
end
|
|||
|
else
|
|||
|
return compareResult > 0
|
|||
|
end
|
|||
|
end)
|
|||
|
|
|||
|
return list
|
|||
|
end
|
|||
|
|
|||
|
|
|||
|
function XTaskManager.SetAchievedList()
|
|||
|
local tasks = XTaskManager.GetTaskDataByTaskType(XTaskManager.TaskType.Achievement)
|
|||
|
local list = {}
|
|||
|
|
|||
|
local taskTemplate = XTaskConfig.GetTaskTemplate()
|
|||
|
for _, task in pairs(tasks) do
|
|||
|
if not (task.State == XTaskManager.TaskState.Invalid) then
|
|||
|
if taskTemplate[task.Id] and taskTemplate[task.Id].ShowAfterTaskId > 0 then
|
|||
|
local preId = taskTemplate[task.Id].ShowAfterTaskId
|
|||
|
if TotalTaskData[preId] then
|
|||
|
if (TotalTaskData[preId].State == XTaskManager.TaskState.Finish or TotalTaskData[preId].State == XTaskManager.TaskState.Invalid) then
|
|||
|
tableInsert(list, task)
|
|||
|
end
|
|||
|
elseif FinishedTasks[preId] then
|
|||
|
tableInsert(list, task)
|
|||
|
end
|
|||
|
else
|
|||
|
tableInsert(list, task)
|
|||
|
end
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
local listAchieved = {}
|
|||
|
for _, v in pairs(list) do
|
|||
|
if v.State == XTaskManager.TaskState.Achieved or v.State == XTaskManager.TaskState.Finish then
|
|||
|
tableInsert(listAchieved, v)
|
|||
|
end
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
--获取成就任务已完成和总数量
|
|||
|
function XTaskManager.GetAchievedTasksByType(achvType)
|
|||
|
|
|||
|
local achieveCount = 0
|
|||
|
local totalCount = 0
|
|||
|
local achieveList = {}
|
|||
|
local achvTaskData = XTaskManager.GetAchvTaskList()
|
|||
|
for _, task in pairs(achvTaskData) do
|
|||
|
local _achvType = XTaskConfig.GetTaskTemplate()[task.Id].AchvType
|
|||
|
if _achvType == achvType and task ~= nil then
|
|||
|
tableInsert(achieveList, task)
|
|||
|
totalCount = totalCount + 1
|
|||
|
if task.State == XTaskManager.TaskState.Finish or task.State == XTaskManager.TaskState.Achieved then
|
|||
|
achieveCount = achieveCount + 1
|
|||
|
end
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
return achieveList, achieveCount, totalCount
|
|||
|
end
|
|||
|
|
|||
|
--红点---------------------------------------------------------
|
|||
|
--根据成就任务类型判断是否有奖励可以领取
|
|||
|
function XTaskManager.HasAchieveTaskRewardByAchieveType(achvType)
|
|||
|
for _, task in pairs(AchvTaskData) do
|
|||
|
local _achvType = XTaskConfig.GetTaskTemplate()[task.Id].AchvType
|
|||
|
if _achvType == achvType and task ~= nil and task.State == XTaskManager.TaskState.Achieved then
|
|||
|
return true
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
return false
|
|||
|
end
|
|||
|
|
|||
|
--判断历程是否有奖励获取
|
|||
|
function XTaskManager.CheckAllCourseCanGet()
|
|||
|
|
|||
|
if not CourseInfos then
|
|||
|
return false
|
|||
|
end
|
|||
|
|
|||
|
local curChapterId = XTaskManager.GetCourseCurChapterId()
|
|||
|
if not CourseInfos[curChapterId] then
|
|||
|
return
|
|||
|
end
|
|||
|
|
|||
|
local canGet = false
|
|||
|
for _, v in ipairs(CourseInfos[curChapterId].Courses) do
|
|||
|
|
|||
|
local stageId = v.StageId
|
|||
|
local stageInfo = XDataCenter.FubenManager.GetStageInfo(stageId)
|
|||
|
|
|||
|
if v.CouresType == XTaskManager.CourseType.Reward and stageInfo.Passed and XTaskManager.CheckCourseCanGet(stageId) then
|
|||
|
canGet = true
|
|||
|
break
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
return canGet
|
|||
|
end
|
|||
|
|
|||
|
--根据任务类型判断是否有奖励可以领取
|
|||
|
function XTaskManager.GetIsRewardForEx(taskType, groupId)
|
|||
|
local taskList = nil
|
|||
|
|
|||
|
-- 创建新系统或者优化原有系统时请使用新的通用任务接口
|
|||
|
-------------------------------------------------------
|
|||
|
if taskType == XTaskManager.TaskType.Story then
|
|||
|
taskList = XTaskManager.GetStoryTaskList()
|
|||
|
elseif taskType == XTaskManager.TaskType.Daily then
|
|||
|
taskList = XTaskManager.GetDailyTaskList()
|
|||
|
elseif taskType == XTaskManager.TaskType.Weekly then
|
|||
|
taskList = XTaskManager.GetWeeklyTaskList()
|
|||
|
elseif taskType == XTaskManager.TaskType.Activity then
|
|||
|
taskList = XTaskManager.GetActivityTaskList()
|
|||
|
elseif taskType == XTaskManager.TaskType.Achievement then
|
|||
|
taskList = XTaskManager.GetAchvTaskList()
|
|||
|
elseif taskType == XTaskManager.TaskType.DormDaily then
|
|||
|
taskList = XTaskManager.GetDormDailyTaskList()
|
|||
|
elseif taskType == XTaskManager.TaskType.DormNormal then
|
|||
|
taskList = XTaskManager.GetDormNormalTaskList()
|
|||
|
elseif taskType == XTaskManager.TaskType.BabelTower then
|
|||
|
taskList = XTaskManager.GetBabelTowerTaskList()
|
|||
|
elseif taskType == XTaskManager.TaskType.RogueLike then
|
|||
|
taskList = XTaskManager.GetRogueLikeTaskList()
|
|||
|
elseif taskType == XTaskManager.TaskType.GuildDaily then
|
|||
|
taskList = XTaskManager.GetGuildDailyTaskList()
|
|||
|
elseif taskType == XTaskManager.TaskType.GuildMainly then
|
|||
|
taskList = XTaskManager.GetGuildMainlyTaskList()
|
|||
|
elseif taskType == XTaskManager.TaskType.GuildWeekly then
|
|||
|
taskList = XTaskManager.GetGuildWeeklyTaskList()
|
|||
|
elseif taskType == XTaskManager.TaskType.ArenaOnlineWeekly then
|
|||
|
taskList = XTaskManager.GetArenaOnlineWeeklyTaskList()
|
|||
|
elseif taskType == XTaskManager.TaskType.InfestorWeekly then
|
|||
|
taskList = XTaskManager.GetInfestorWeeklyTaskList()
|
|||
|
elseif taskType == XTaskManager.TaskType.WorldBoss then
|
|||
|
taskList = XTaskManager.GetWorldBossTaskList()
|
|||
|
elseif taskType == XTaskManager.TaskType.MentorShipGrow then
|
|||
|
taskList = XTaskManager.GetMentorGrowTaskList()
|
|||
|
elseif taskType == XTaskManager.TaskType.MentorShipGraduate then
|
|||
|
taskList = XTaskManager.GetMentorGraduateTaskList()
|
|||
|
elseif taskType == XTaskManager.TaskType.MentorShipWeekly then
|
|||
|
taskList = XTaskManager.GetMentorWeeklyTaskList()
|
|||
|
elseif taskType == XTaskManager.TaskType.NieR then
|
|||
|
taskList = XTaskManager.GetNieRTaskList()
|
|||
|
elseif taskType == XTaskManager.TaskType.Pokemon then
|
|||
|
taskList = XTaskManager.GetPokemonTaskList()
|
|||
|
elseif taskType == XTaskManager.TaskType.Couplet then
|
|||
|
taskList = XTaskManager.GetCoupletTaskList()
|
|||
|
elseif taskType == XTaskManager.TaskType.SimulatedCombat then
|
|||
|
taskList = XTaskManager.GetSimulatedCombatTaskList()
|
|||
|
elseif taskType == XTaskManager.TaskType.MoeWarDaily then
|
|||
|
taskList = XTaskManager.GetMoeWarDailyTaskList()
|
|||
|
elseif taskType == XTaskManager.TaskType.MoeWarNormal then
|
|||
|
taskList = XTaskManager.GetMoeWarNormalTaskList()
|
|||
|
elseif taskType == XTaskManager.TaskType.Passport then
|
|||
|
taskList = XTaskManager.GetPassportTaskList()
|
|||
|
elseif taskType == XTaskManager.TaskType.LivWarmSoundsActivity then
|
|||
|
taskList = XTaskManager.GetLivWarmSoundsActivityFullTaskList()
|
|||
|
elseif taskType == XTaskManager.TaskType.BossOnLine then
|
|||
|
taskList = XTaskManager.GetBossOnlineTaskListData()
|
|||
|
-------------------------------------------------------
|
|||
|
elseif taskType then
|
|||
|
taskList = XTaskManager.GetTaskList(taskType, groupId)
|
|||
|
end
|
|||
|
|
|||
|
if taskList == nil then
|
|||
|
return false
|
|||
|
end
|
|||
|
for _, taskInfo in pairs(taskList) do
|
|||
|
if taskInfo ~= nil and taskInfo.State == XTaskManager.TaskState.Achieved then
|
|||
|
return true
|
|||
|
end
|
|||
|
end
|
|||
|
return false
|
|||
|
end
|
|||
|
|
|||
|
--判断新手任务是否有奖励可以领取
|
|||
|
function XTaskManager.CheckIsNewPlayerTaskReward()
|
|||
|
local newPlayerTaskGroupTemplate = XTaskConfig.GetNewPlayerTaskGroupTemplate()
|
|||
|
if not newPlayerTaskGroupTemplate then
|
|||
|
return false
|
|||
|
end
|
|||
|
|
|||
|
|
|||
|
local hasReward = false
|
|||
|
|
|||
|
for k, _ in pairs(newPlayerTaskGroupTemplate) do
|
|||
|
local state = XTaskManager.GetNewPlayerGroupTaskStatus(k)
|
|||
|
|
|||
|
local talkConfig = XTaskManager.GetNewPlayerTaskTalkConfig(k)
|
|||
|
local isNewPlayerTaskUIGroupActive = XPlayer.IsNewPlayerTaskUIGroupActive(k)
|
|||
|
if talkConfig and not isNewPlayerTaskUIGroupActive and talkConfig.StoryId and state ~= XTaskManager.NewPlayerTaskGroupState.Lock then
|
|||
|
hasReward = true
|
|||
|
break
|
|||
|
end
|
|||
|
|
|||
|
if state == XTaskManager.NewPlayerTaskGroupState.HasAward then
|
|||
|
hasReward = true
|
|||
|
break
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
return hasReward
|
|||
|
end
|
|||
|
|
|||
|
--判断是否有每日活跃任务是否有奖励可以领取
|
|||
|
function XTaskManager.CheckHasWeekActiveTaskReward()
|
|||
|
local wActiveness = XDataCenter.ItemManager.GetWeeklyActiveness().Count
|
|||
|
local weekActiveness = XTaskConfig.GetWeeklyActiveness()
|
|||
|
|
|||
|
for i = 1, 2 do
|
|||
|
if weekActiveness[i] <= wActiveness and (not XPlayer.IsGetWeeklyActivenessReward(i)) then
|
|||
|
return true
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
return false
|
|||
|
end
|
|||
|
|
|||
|
|
|||
|
--判断是否有周活跃任务是否有奖励可以领取
|
|||
|
function XTaskManager.CheckHasDailyActiveTaskReward()
|
|||
|
local dActiveness = XDataCenter.ItemManager.GetDailyActiveness().Count
|
|||
|
local dailyActiveness = XTaskConfig.GetDailyActiveness()
|
|||
|
for i = 1, 5 do
|
|||
|
if dailyActiveness[i] <= dActiveness and (not XPlayer.IsGetDailyActivenessReward(i)) then
|
|||
|
return true
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
return false
|
|||
|
end
|
|||
|
|
|||
|
-- 创建新系统或者优化原有系统时请使用新的通用任务接口
|
|||
|
-------------------------------------------------------
|
|||
|
function XTaskManager.GetStoryTaskList()
|
|||
|
return GetTaskList(XTaskManager.GetTaskDataByTaskType(XTaskManager.TaskType.Story))
|
|||
|
end
|
|||
|
|
|||
|
function XTaskManager.GetDailyTaskList()
|
|||
|
return GetTaskList(XTaskManager.GetTaskDataByTaskType(XTaskManager.TaskType.Daily))
|
|||
|
end
|
|||
|
|
|||
|
function XTaskManager.GetWeeklyTaskList()
|
|||
|
local weeklyTasks = XTaskManager.GetTaskDataByTaskType(XTaskManager.TaskType.Weekly) or {}
|
|||
|
local arenaOnlineWeeklyTasks = XTaskManager.GetTaskDataByTaskType(XTaskManager.TaskType.ArenaOnlineWeekly) or {}
|
|||
|
local guildWeeklyTasks = XTaskManager.GetTaskDataByTaskType(XTaskManager.TaskType.GuildWeekly) or {}
|
|||
|
local infestorWeeklyTasks = XTaskManager.GetTaskDataByTaskType(XTaskManager.TaskType.InfestorWeekly) or {}
|
|||
|
|
|||
|
local tasks = {}
|
|||
|
for k, v in pairs(weeklyTasks) do
|
|||
|
tasks[k] = v
|
|||
|
end
|
|||
|
|
|||
|
for k, v in pairs(arenaOnlineWeeklyTasks) do
|
|||
|
tasks[k] = v
|
|||
|
end
|
|||
|
|
|||
|
for k, v in pairs(guildWeeklyTasks) do
|
|||
|
tasks[k] = v
|
|||
|
end
|
|||
|
|
|||
|
for k, v in pairs(infestorWeeklyTasks) do
|
|||
|
tasks[k] = v
|
|||
|
end
|
|||
|
|
|||
|
return GetTaskList(tasks)
|
|||
|
end
|
|||
|
|
|||
|
function XTaskManager.GetActivityTaskList()
|
|||
|
return GetTaskList(XTaskManager.GetTaskDataByTaskType(XTaskManager.TaskType.Activity))
|
|||
|
end
|
|||
|
|
|||
|
function XTaskManager.GetAchvTaskList()
|
|||
|
return GetTaskList(XTaskManager.GetTaskDataByTaskType(XTaskManager.TaskType.Achievement))
|
|||
|
end
|
|||
|
|
|||
|
function XTaskManager.GetTimeLimitTaskList()
|
|||
|
return GetTaskList(XTaskManager.GetTaskDataByTaskType(XTaskManager.TaskType.TimeLimit))
|
|||
|
end
|
|||
|
|
|||
|
function XTaskManager.GetArenaChallengeTaskList()
|
|||
|
return GetTaskList(XTaskManager.GetTaskDataByTaskType(XTaskManager.TaskType.ArenaChallenge))
|
|||
|
end
|
|||
|
|
|||
|
function XTaskManager.GetDormNormalTaskList()
|
|||
|
return GetTaskList(XTaskManager.GetTaskDataByTaskType(XTaskManager.TaskType.DormNormal))
|
|||
|
end
|
|||
|
|
|||
|
function XTaskManager.GetDormDailyTaskList()
|
|||
|
return GetTaskList(XTaskManager.GetTaskDataByTaskType(XTaskManager.TaskType.DormDaily))
|
|||
|
end
|
|||
|
|
|||
|
function XTaskManager.GetBabelTowerTaskList()
|
|||
|
return GetTaskList(XTaskManager.GetTaskDataByTaskType(XTaskManager.TaskType.BabelTower))
|
|||
|
end
|
|||
|
|
|||
|
function XTaskManager.GetArenaOnlineWeeklyTaskList()
|
|||
|
return GetTaskList(XTaskManager.GetTaskDataByTaskType(XTaskManager.TaskType.ArenaOnlineWeekly))
|
|||
|
end
|
|||
|
|
|||
|
function XTaskManager.GetInfestorWeeklyTaskList()
|
|||
|
return GetTaskList(XTaskManager.GetTaskDataByTaskType(XTaskManager.TaskType.InfestorWeekly))
|
|||
|
end
|
|||
|
|
|||
|
-- 包括已完成的任务
|
|||
|
function XTaskManager.GetBabelTowerFullTaskList()
|
|||
|
local tasks = {}
|
|||
|
for _, v in pairs(BabelTowerTaskData) do
|
|||
|
table.insert(tasks, v)
|
|||
|
end
|
|||
|
return tasks
|
|||
|
end
|
|||
|
|
|||
|
function XTaskManager.GetRogueLikeTaskList()
|
|||
|
return GetTaskList(XTaskManager.GetTaskDataByTaskType(XTaskManager.TaskType.RogueLike))
|
|||
|
end
|
|||
|
|
|||
|
function XTaskManager.GetRogueLikeFullTaskList()
|
|||
|
local tasks = {}
|
|||
|
for _, v in pairs(RogueLikeTaskData) do
|
|||
|
table.insert(tasks, v)
|
|||
|
end
|
|||
|
return tasks
|
|||
|
end
|
|||
|
|
|||
|
function XTaskManager.GetRpgTowerTaskList()
|
|||
|
return GetTaskList(XTaskManager.GetTaskDataByTaskType(XTaskManager.TaskType.RpgTower))
|
|||
|
end
|
|||
|
|
|||
|
function XTaskManager.GetRpgTowerFullTaskList()
|
|||
|
local tasks = {}
|
|||
|
for _, v in pairs(RpgTowerTaskData) do
|
|||
|
table.insert(tasks, v)
|
|||
|
end
|
|||
|
return tasks
|
|||
|
end
|
|||
|
|
|||
|
function XTaskManager.GetWhiteValentineTaskList()
|
|||
|
return GetTaskList(XTaskManager.GetTaskDataByTaskType(XTaskManager.TaskType.WhiteValentine))
|
|||
|
end
|
|||
|
|
|||
|
function XTaskManager.GetWhiteValentineFullTaskList()
|
|||
|
local tasks = {}
|
|||
|
for _, v in pairs(WhiteValentineTaskData) do
|
|||
|
table.insert(tasks, v)
|
|||
|
end
|
|||
|
return tasks
|
|||
|
end
|
|||
|
|
|||
|
function XTaskManager.GetWhiteValentineFirstNotAcheivedMission()
|
|||
|
local taskList = XDataCenter.TaskManager.GetWhiteValentineFullTaskList()
|
|||
|
for _, v in pairs(taskList or {}) do
|
|||
|
v.SortWeight = 2
|
|||
|
if v.State == XDataCenter.TaskManager.TaskState.Achieved then
|
|||
|
v.SortWeight = 1
|
|||
|
elseif v.State == XDataCenter.TaskManager.TaskState.Finish or v.State == XDataCenter.TaskManager.TaskState.Invalid then
|
|||
|
v.SortWeight = 3
|
|||
|
end
|
|||
|
end
|
|||
|
table.sort(taskList, function(taskA, taskB)
|
|||
|
if taskA.SortWeight == taskB.SortWeight then
|
|||
|
return taskA.Id < taskB.Id
|
|||
|
end
|
|||
|
return taskA.SortWeight < taskB.SortWeight
|
|||
|
end)
|
|||
|
return taskList[1]
|
|||
|
end
|
|||
|
|
|||
|
function XTaskManager.GetPokerGuessingTaskList()
|
|||
|
return GetTaskList(PokerGuessingTaskData)
|
|||
|
end
|
|||
|
|
|||
|
function XTaskManager.GetFingerGuessingTaskList()
|
|||
|
return GetTaskList(XTaskManager.GetTaskDataByTaskType(XTaskManager.TaskType.FingerGuessing))
|
|||
|
end
|
|||
|
|
|||
|
function XTaskManager.GetFingerGuessingFullTaskList()
|
|||
|
local tasks = {}
|
|||
|
for _, v in pairs(FingerGuessingTaskData) do
|
|||
|
table.insert(tasks, v)
|
|||
|
end
|
|||
|
return tasks
|
|||
|
end
|
|||
|
|
|||
|
function XTaskManager.GetZhouMuFullTaskList()
|
|||
|
local tasks = {}
|
|||
|
for _, v in pairs(ZhouMuTaskData) do
|
|||
|
table.insert(tasks, v)
|
|||
|
end
|
|||
|
return tasks
|
|||
|
end
|
|||
|
|
|||
|
function XTaskManager.GetWorldBossTaskList()
|
|||
|
return GetTaskList(XTaskManager.GetTaskDataByTaskType(XTaskManager.TaskType.WorldBoss))
|
|||
|
end
|
|||
|
|
|||
|
function XTaskManager.GetNierTaskListByGroupId(groupId)
|
|||
|
local tasksCfgs = XTaskConfig.GetTaskTemplate()
|
|||
|
local result = {}
|
|||
|
for _, task in pairs(NieRTaskData) do
|
|||
|
local taskId = task.Id
|
|||
|
local task = NieRTaskData[taskId]
|
|||
|
if tasksCfgs[taskId].GroupId == groupId and task then
|
|||
|
result[taskId] = task
|
|||
|
end
|
|||
|
end
|
|||
|
return GetTaskList(result)
|
|||
|
end
|
|||
|
|
|||
|
function XTaskManager.GetNieRTaskList()
|
|||
|
return GetTaskList(XTaskManager.GetTaskDataByTaskType(XTaskManager.TaskType.NieR))
|
|||
|
end
|
|||
|
|
|||
|
function XTaskManager.GetWorldBossFullTaskList()
|
|||
|
local tasks = {}
|
|||
|
local bossTaskDataDic = XDataCenter.WorldBossManager.GetWorldBossBossTaskDataDic()
|
|||
|
|
|||
|
for _, v in pairs(WorldBossTaskData) do
|
|||
|
local IsCanShow = true
|
|||
|
for _, data in pairs(bossTaskDataDic and bossTaskDataDic[v.Id] or {}) do
|
|||
|
if data:GetIsLock() then
|
|||
|
IsCanShow = false
|
|||
|
break
|
|||
|
end
|
|||
|
end
|
|||
|
if IsCanShow then
|
|||
|
table.insert(tasks, v)
|
|||
|
end
|
|||
|
end
|
|||
|
return tasks
|
|||
|
end
|
|||
|
|
|||
|
function XTaskManager.GetMentorGrowTaskList()
|
|||
|
return GetTaskList(XTaskManager.GetTaskDataByTaskType(XTaskManager.TaskType.MentorShipGrow))
|
|||
|
end
|
|||
|
|
|||
|
function XTaskManager.GetMentorGrowFullTaskList()
|
|||
|
local taskTemplate = XTaskConfig.GetTaskTemplate()
|
|||
|
local tasks = {}
|
|||
|
for _, v in pairs(MentorGrowTaskData) do
|
|||
|
table.insert(tasks, v)
|
|||
|
end
|
|||
|
tableSort(tasks, function(a, b)
|
|||
|
local pa, pb = taskTemplate[a.Id].Priority, taskTemplate[b.Id].Priority
|
|||
|
local stateA = TotalTaskData[a.Id].State
|
|||
|
local stateB = TotalTaskData[b.Id].State
|
|||
|
local compareResult = CompareState(stateA, stateB)
|
|||
|
if compareResult == 0 then
|
|||
|
if pa ~= pb then
|
|||
|
return pa > pb
|
|||
|
else
|
|||
|
return a.Id > b.Id
|
|||
|
end
|
|||
|
else
|
|||
|
return compareResult > 0
|
|||
|
end
|
|||
|
end)
|
|||
|
|
|||
|
return tasks
|
|||
|
end
|
|||
|
|
|||
|
function XTaskManager.GetMentorGraduateTaskList()
|
|||
|
return GetTaskList(XTaskManager.GetTaskDataByTaskType(XTaskManager.TaskType.MentorShipGraduate))
|
|||
|
end
|
|||
|
|
|||
|
function XTaskManager.GetMentorGraduateFullTaskList()
|
|||
|
local taskTemplate = XTaskConfig.GetTaskTemplate()
|
|||
|
local tasks = {}
|
|||
|
for _, v in pairs(MentorGraduateTaskData) do
|
|||
|
table.insert(tasks, v)
|
|||
|
end
|
|||
|
tableSort(tasks, function(a, b)
|
|||
|
local pa, pb = taskTemplate[a.Id].Priority, taskTemplate[b.Id].Priority
|
|||
|
local stateA = TotalTaskData[a.Id].State
|
|||
|
local stateB = TotalTaskData[b.Id].State
|
|||
|
local compareResult = CompareState(stateA, stateB)
|
|||
|
if compareResult == 0 then
|
|||
|
if pa ~= pb then
|
|||
|
return pa > pb
|
|||
|
else
|
|||
|
return a.Id > b.Id
|
|||
|
end
|
|||
|
else
|
|||
|
return compareResult > 0
|
|||
|
end
|
|||
|
end)
|
|||
|
return tasks
|
|||
|
end
|
|||
|
|
|||
|
function XTaskManager.GetCoupletTaskList()
|
|||
|
local tasks = {}
|
|||
|
for _, v in pairs(CoupletTaskData) do
|
|||
|
table.insert(tasks, v)
|
|||
|
end
|
|||
|
return tasks
|
|||
|
end
|
|||
|
|
|||
|
function XTaskManager.GetSimulatedCombatTaskList()
|
|||
|
local tasks = {}
|
|||
|
for _, v in pairs(SimulatedCombatTaskData) do
|
|||
|
table.insert(tasks, v)
|
|||
|
end
|
|||
|
return tasks
|
|||
|
end
|
|||
|
|
|||
|
|
|||
|
|
|||
|
function XTaskManager.CheckMentorGraduateAllAchieved()
|
|||
|
local taskTemplate = XTaskConfig.GetTaskTemplate()
|
|||
|
for _, v in pairs(MentorGraduateTaskData) do
|
|||
|
if TotalTaskData[v.Id].State < XTaskManager.TaskState.Achieved then
|
|||
|
return false
|
|||
|
end
|
|||
|
end
|
|||
|
return true
|
|||
|
end
|
|||
|
|
|||
|
function XTaskManager.GetMentorWeeklyTaskList()
|
|||
|
return GetTaskList(XTaskManager.GetTaskDataByTaskType(XTaskManager.TaskType.MentorShipWeekly))
|
|||
|
end
|
|||
|
|
|||
|
function XTaskManager.GetMentorWeeklyFullTaskList()
|
|||
|
local taskTemplate = XTaskConfig.GetTaskTemplate()
|
|||
|
local tasks = {}
|
|||
|
for _, v in pairs(MentorWeeklyTaskData) do
|
|||
|
table.insert(tasks, v)
|
|||
|
end
|
|||
|
tableSort(tasks, function(a, b)
|
|||
|
local pa, pb = taskTemplate[a.Id].Priority, taskTemplate[b.Id].Priority
|
|||
|
local stateA = TotalTaskData[a.Id].State
|
|||
|
local stateB = TotalTaskData[b.Id].State
|
|||
|
local compareResult = CompareState(stateA, stateB)
|
|||
|
if compareResult == 0 then
|
|||
|
if pa ~= pb then
|
|||
|
return pa > pb
|
|||
|
else
|
|||
|
return a.Id > b.Id
|
|||
|
end
|
|||
|
else
|
|||
|
return compareResult > 0
|
|||
|
end
|
|||
|
end)
|
|||
|
return tasks
|
|||
|
end
|
|||
|
|
|||
|
-- 包括已完成的任务
|
|||
|
function XTaskManager.GetGuildDailyTaskList()
|
|||
|
return GetTaskList(XTaskManager.GetTaskDataByTaskType(XTaskManager.TaskType.GuildDaily))
|
|||
|
end
|
|||
|
|
|||
|
function XTaskManager.GetGuildDailyFullTaskList()
|
|||
|
local tasks = {}
|
|||
|
for _, v in pairs(GuildDailyTaskData) do
|
|||
|
table.insert(tasks, v)
|
|||
|
end
|
|||
|
return tasks
|
|||
|
end
|
|||
|
|
|||
|
function XTaskManager.GetGuildMainlyTaskList()
|
|||
|
return GetTaskList(XTaskManager.GetTaskDataByTaskType(XTaskManager.TaskType.GuildMainly))
|
|||
|
end
|
|||
|
|
|||
|
function XTaskManager.GetGuildMainlyFullTaskList()
|
|||
|
local tasks = {}
|
|||
|
for _, v in pairs(GuildMainlyTaskData) do
|
|||
|
table.insert(tasks, v)
|
|||
|
end
|
|||
|
return tasks
|
|||
|
end
|
|||
|
|
|||
|
function XTaskManager.GetGuildWeeklyTaskList()
|
|||
|
return GetTaskList(XTaskManager.GetTaskDataByTaskType(XTaskManager.TaskType.GuildWeekly))
|
|||
|
end
|
|||
|
|
|||
|
function XTaskManager.GetGuildWeeklyFullTaskList()
|
|||
|
local tasks = {}
|
|||
|
for _, v in pairs(GuildWeeklyTaskData) do
|
|||
|
table.insert(tasks, v)
|
|||
|
end
|
|||
|
return tasks
|
|||
|
end
|
|||
|
|
|||
|
function XTaskManager.CheckLimitTaskList(taskGroupId)
|
|||
|
local tasks = XTaskManager.GetTimeLimitTaskListByGroupId(taskGroupId)
|
|||
|
for _, v in pairs(tasks or {}) do
|
|||
|
if v.State == XTaskManager.TaskState.Achieved then
|
|||
|
return true
|
|||
|
end
|
|||
|
end
|
|||
|
return false
|
|||
|
end
|
|||
|
|
|||
|
function XTaskManager.GetTimeLimitTaskListByGroupId(taskGroupId, isSort)
|
|||
|
if isSort == nil then isSort = true end
|
|||
|
local taskDatas = {}
|
|||
|
|
|||
|
local timeLimitTaskCfg = taskGroupId ~= 0 and XTaskConfig.GetTimeLimitTaskCfg(taskGroupId)
|
|||
|
if not timeLimitTaskCfg then return taskDatas end
|
|||
|
|
|||
|
if not XTaskConfig.IsTimeLimitTaskInTime(taskGroupId) then
|
|||
|
return taskDatas
|
|||
|
end
|
|||
|
|
|||
|
for _, taskId in ipairs(timeLimitTaskCfg.TaskId) do
|
|||
|
local taskData = XDataCenter.TaskManager.GetTaskDataById(taskId)
|
|||
|
if CheckTask(taskData) then
|
|||
|
tableInsert(taskDatas, taskData)
|
|||
|
end
|
|||
|
end
|
|||
|
for _, taskId in ipairs(timeLimitTaskCfg.DayTaskId) do
|
|||
|
local taskData = XDataCenter.TaskManager.GetTaskDataById(taskId)
|
|||
|
if CheckTask(taskData) then
|
|||
|
tableInsert(taskDatas, taskData)
|
|||
|
end
|
|||
|
end
|
|||
|
for _, taskId in ipairs(timeLimitTaskCfg.WeekTaskId) do
|
|||
|
local taskData = XDataCenter.TaskManager.GetTaskDataById(taskId)
|
|||
|
if CheckTask(taskData) then
|
|||
|
tableInsert(taskDatas, taskData)
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
if isSort then
|
|||
|
local achieved = XDataCenter.TaskManager.TaskState.Achieved
|
|||
|
local finish = XDataCenter.TaskManager.TaskState.Finish
|
|||
|
tableSort(taskDatas, function(a, b)
|
|||
|
if a.State ~= b.State then
|
|||
|
if a.State == achieved then
|
|||
|
return true
|
|||
|
end
|
|||
|
if b.State == achieved then
|
|||
|
return false
|
|||
|
end
|
|||
|
if a.State == finish then
|
|||
|
return false
|
|||
|
end
|
|||
|
if b.State == finish then
|
|||
|
return true
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
local templatesTaskA = XDataCenter.TaskManager.GetTaskTemplate(a.Id)
|
|||
|
local templatesTaskB = XDataCenter.TaskManager.GetTaskTemplate(b.Id)
|
|||
|
return templatesTaskA.Priority > templatesTaskB.Priority
|
|||
|
end)
|
|||
|
end
|
|||
|
|
|||
|
return taskDatas
|
|||
|
end
|
|||
|
|
|||
|
function XTaskManager.GetPokemonTaskList()
|
|||
|
return GetTaskList(XTaskManager.GetTaskDataByTaskType(XTaskManager.TaskType.Pokemon))
|
|||
|
end
|
|||
|
|
|||
|
function XTaskManager.GetMoeWarDailyTaskList()
|
|||
|
return GetTaskList(MoeWarDailyTaskData)
|
|||
|
end
|
|||
|
|
|||
|
function XTaskManager.GetMoeWarNormalTaskList()
|
|||
|
return GetTaskList(MoeWarNormalTaskData)
|
|||
|
end
|
|||
|
|
|||
|
function XTaskManager.GetPassportTaskList()
|
|||
|
return GetTaskList(PassportTaskData)
|
|||
|
end
|
|||
|
|
|||
|
function XTaskManager.GetLivWarmSoundsActivityFullTaskList()
|
|||
|
return GetTaskList(LivWarmSoundsActivityTaskData)
|
|||
|
end
|
|||
|
--根据任务类型获取对应的任务数据
|
|||
|
function XTaskManager.GetSortTaskListByTaskType(taskType)
|
|||
|
return GetTaskList(XTaskManager.GetTaskList(taskType))
|
|||
|
end
|
|||
|
|
|||
|
---------------- 仅支持使用通用接口的任务类型 --------------
|
|||
|
function XTaskManager.GetTaskList(taskType, groupId)
|
|||
|
local tasks = {}
|
|||
|
|
|||
|
if TaskDataGroup[taskType] ~= nil then
|
|||
|
for _, v in pairs(TaskDataGroup[taskType]) do
|
|||
|
if groupId then
|
|||
|
local templates = XTaskConfig.GetTaskCfgById(v.Id)
|
|||
|
if templates.GroupId ~= groupId then
|
|||
|
goto CONTINUE
|
|||
|
end
|
|||
|
end
|
|||
|
table.insert(tasks, v)
|
|||
|
::CONTINUE::
|
|||
|
end
|
|||
|
end
|
|||
|
return tasks
|
|||
|
end
|
|||
|
|
|||
|
function XTaskManager.GetTaskProgress(taskType, groupId)
|
|||
|
local passCount = 0
|
|||
|
local allCount = 0
|
|||
|
if TaskDataGroup[taskType] ~= nil then
|
|||
|
for _, task in pairs(TaskDataGroup[taskType]) do
|
|||
|
if groupId then
|
|||
|
local templates = XTaskConfig.GetTaskCfgById(task.Id)
|
|||
|
if templates.GroupId ~= groupId then
|
|||
|
goto CONTINUE
|
|||
|
end
|
|||
|
end
|
|||
|
allCount = allCount + 1
|
|||
|
if task.State == XDataCenter.TaskManager.TaskState.Finish then
|
|||
|
passCount = passCount + 1
|
|||
|
end
|
|||
|
::CONTINUE::
|
|||
|
end
|
|||
|
end
|
|||
|
return passCount, allCount
|
|||
|
end
|
|||
|
|
|||
|
function XTaskManager.GetTaskProgressByTaskList(taskList)
|
|||
|
local passCount = 0
|
|||
|
local allCount = 0
|
|||
|
for _, task in pairs(taskList) do
|
|||
|
allCount = allCount + 1
|
|||
|
if task.State == XDataCenter.TaskManager.TaskState.Finish then
|
|||
|
passCount = passCount + 1
|
|||
|
end
|
|||
|
:: CONTINUE ::
|
|||
|
end
|
|||
|
return passCount, allCount
|
|||
|
end
|
|||
|
---------------------------------------------------
|
|||
|
|
|||
|
--根据任务类型获得成就任务
|
|||
|
function XTaskManager.GetAchvTaskByAchieveType(achvType)
|
|||
|
local achieveTasks = XTaskManager.GetAchvTaskList()
|
|||
|
local taskList = {}
|
|||
|
for _, var in achieveTasks do
|
|||
|
if var.AchvType == achvType then
|
|||
|
tableInsert(taskList, var)
|
|||
|
end
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
function XTaskManager.GetTaskDataByTaskType(taskType)
|
|||
|
local datas = {}
|
|||
|
|
|||
|
if taskType == XTaskManager.TaskType.Story then
|
|||
|
datas = StoryTaskData
|
|||
|
elseif taskType == XTaskManager.TaskType.Daily then
|
|||
|
datas = DailyTaskData
|
|||
|
elseif taskType == XTaskManager.TaskType.Weekly then
|
|||
|
datas = WeeklyTaskData
|
|||
|
elseif taskType == XTaskManager.TaskType.Activity then
|
|||
|
datas = ActivityTaskData
|
|||
|
elseif taskType == XTaskManager.TaskType.NewPlayer then
|
|||
|
datas = NewPlayerTaskData
|
|||
|
elseif taskType == XTaskManager.TaskType.Achievement then
|
|||
|
datas = AchvTaskData
|
|||
|
elseif taskType == XTaskManager.TaskType.ArenaChallenge then
|
|||
|
datas = ArenaTaskData
|
|||
|
elseif taskType == XTaskManager.TaskType.TimeLimit then
|
|||
|
datas = TimeLimitTaskData
|
|||
|
elseif taskType == XTaskManager.TaskType.DormDaily then
|
|||
|
datas = DormDailyTaskData
|
|||
|
elseif taskType == XTaskManager.TaskType.DormNormal then
|
|||
|
datas = DormNormalTaskData
|
|||
|
elseif taskType == XTaskManager.TaskType.BabelTower then
|
|||
|
datas = BabelTowerTaskData
|
|||
|
elseif taskType == XTaskManager.TaskType.RogueLike then
|
|||
|
datas = RogueLikeTaskData
|
|||
|
elseif taskType == XTaskManager.TaskType.GuildDaily then
|
|||
|
datas = GuildDailyTaskData
|
|||
|
elseif taskType == XTaskManager.TaskType.GuildMainly then
|
|||
|
datas = GuildMainlyTaskData
|
|||
|
elseif taskType == XTaskManager.TaskType.GuildWeekly then
|
|||
|
datas = GuildWeeklyTaskData
|
|||
|
elseif taskType == XTaskManager.TaskType.ArenaOnlineWeekly then
|
|||
|
datas = ArenaOnlineWeeklyTaskData
|
|||
|
elseif taskType == XTaskManager.TaskType.InfestorWeekly then
|
|||
|
datas = InfestorWeeklyTaskData
|
|||
|
elseif taskType == XTaskManager.TaskType.WorldBoss then
|
|||
|
datas = WorldBossTaskData
|
|||
|
elseif taskType == XTaskManager.TaskType.RpgTower then
|
|||
|
datas = RpgTowerTaskData
|
|||
|
elseif taskType == XTaskManager.TaskType.WhiteValetine then
|
|||
|
datas = WhiteValentineTaskData
|
|||
|
elseif taskType == XTaskManager.TaskType.FingerGuessing then
|
|||
|
datas = FingerGuessingTaskData
|
|||
|
elseif taskType == XTaskManager.TaskType.MentorShipGrow then
|
|||
|
datas = MentorGrowTaskData
|
|||
|
elseif taskType == XTaskManager.TaskType.MentorShipGraduate then
|
|||
|
datas = MentorGraduateTaskData
|
|||
|
elseif taskType == XTaskManager.TaskType.MentorShipWeekly then
|
|||
|
datas = MentorWeeklyTaskData
|
|||
|
elseif taskType == XTaskManager.TaskType.NieR then
|
|||
|
datas = NieRTaskData
|
|||
|
elseif taskType == XTaskManager.TaskType.Pokemon then
|
|||
|
datas = PokemonTaskData
|
|||
|
elseif taskType == XTaskManager.TaskType.Couplet then
|
|||
|
datas = CoupletTaskData
|
|||
|
elseif taskType == XTaskManager.TaskType.SimulatedCombat then
|
|||
|
datas = SimulatedCombatTaskData
|
|||
|
elseif taskType == XTaskManager.TaskType.MoeWarDaily then
|
|||
|
datas = MoeWarDailyTaskData
|
|||
|
elseif taskType == XTaskManager.TaskType.MoeWarNormal then
|
|||
|
datas = MoeWarNormalTaskData
|
|||
|
elseif taskType == XTaskManager.TaskType.PokerGuessing or taskType == XTaskManager.TaskType.PokerGuessingCollection then
|
|||
|
datas = PokerGuessingTaskData
|
|||
|
elseif taskType == XTaskManager.TaskType.Passport then
|
|||
|
datas = PassportTaskData
|
|||
|
elseif taskType then
|
|||
|
datas = TaskDataGroup[taskType] or {}
|
|||
|
end
|
|||
|
local result = {}
|
|||
|
for k, v in pairs(datas) do
|
|||
|
--原: v.State ~= XTaskManager.TaskState.Finish and v.State ~= XTaskManager.TaskState.Invalid
|
|||
|
if XTaskConfig.GetTaskTemplate()[v.Id].Type == XTaskManager.TaskType.Achievement and v.State == XTaskManager.TaskState.Finish then
|
|||
|
result[k] = v
|
|||
|
elseif v.State ~= XTaskManager.TaskState.Finish and v.State ~= XTaskManager.TaskState.Invalid then
|
|||
|
result[k] = v
|
|||
|
elseif XTaskConfig.GetTaskTemplate()[v.Id].Type == XTaskManager.TaskType.ArenaChallenge and v.State ~= XTaskManager.TaskState.Invalid then
|
|||
|
result[k] = v
|
|||
|
end
|
|||
|
end
|
|||
|
return result
|
|||
|
end
|
|||
|
|
|||
|
function XTaskManager.ResetStoryGroupTaskData()
|
|||
|
for _, v in pairs(StoryGroupTaskData) do
|
|||
|
v.UnfinishCount = 0
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
function XTaskManager.GetCurrentStoryTaskGroupId()
|
|||
|
XTaskManager.ResetStoryGroupTaskData()
|
|||
|
|
|||
|
local headGroupId = 1
|
|||
|
for _, v in pairs(StoryTaskData) do
|
|||
|
local templates = XTaskManager.GetTaskTemplate(v.Id)
|
|||
|
if templates.GroupId > 0 then
|
|||
|
if templates.ShowAfterGroup <= 0 then
|
|||
|
headGroupId = templates.GroupId
|
|||
|
end
|
|||
|
local groupDatas = StoryGroupTaskData[templates.GroupId]
|
|||
|
if groupDatas == nil then
|
|||
|
StoryGroupTaskData[templates.GroupId] = {}
|
|||
|
groupDatas = StoryGroupTaskData[templates.GroupId]
|
|||
|
groupDatas.GroupId = templates.GroupId
|
|||
|
groupDatas.ShowAfterGroup = templates.ShowAfterGroup
|
|||
|
groupDatas.UnfinishCount = 0
|
|||
|
end
|
|||
|
|
|||
|
if v.State ~= XTaskManager.TaskState.Finish and v.State ~= XTaskManager.TaskState.Invalid then
|
|||
|
groupDatas.UnfinishCount = groupDatas.UnfinishCount + 1
|
|||
|
end
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
for _, groupDatas in pairs(StoryGroupTaskData) do
|
|||
|
if groupDatas.ShowAfterGroup > 0 then
|
|||
|
StoryGroupTaskData[groupDatas.ShowAfterGroup].NextGroupId = groupDatas.GroupId
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
local currentGoupId = headGroupId
|
|||
|
local currentGroupDatas = StoryGroupTaskData[currentGoupId]
|
|||
|
while currentGroupDatas and currentGroupDatas.UnfinishCount <= 0 do
|
|||
|
currentGoupId = currentGroupDatas.NextGroupId
|
|||
|
if currentGoupId == nil then break end
|
|||
|
currentGroupDatas = StoryGroupTaskData[currentGoupId]
|
|||
|
end
|
|||
|
return currentGoupId
|
|||
|
end
|
|||
|
|
|||
|
function XTaskManager.ResetDormStoryGroupTaskData()
|
|||
|
for _, v in pairs(DormStoryGroupTaskData) do
|
|||
|
v.UnfinishCount = 0
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
function XTaskManager.ResetDormDailyGroupTaskData()
|
|||
|
for _, v in pairs(DormDailyGroupTaskData) do
|
|||
|
v.UnfinishCount = 0
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
function XTaskManager.GetCurrentDormDailyTaskGroupId()
|
|||
|
XTaskManager.ResetDormDailyGroupTaskData()
|
|||
|
|
|||
|
local headGroupId = 1
|
|||
|
for _, v in pairs(DormDailyTaskData) do
|
|||
|
local templates = XTaskManager.GetTaskTemplate(v.Id)
|
|||
|
if templates.GroupId > 0 then
|
|||
|
if templates.ShowAfterGroup <= 0 then
|
|||
|
headGroupId = templates.GroupId
|
|||
|
end
|
|||
|
local groupDatas = DormDailyGroupTaskData[templates.GroupId]
|
|||
|
if groupDatas == nil then
|
|||
|
DormDailyGroupTaskData[templates.GroupId] = {}
|
|||
|
groupDatas = DormDailyGroupTaskData[templates.GroupId]
|
|||
|
groupDatas.GroupId = templates.GroupId
|
|||
|
groupDatas.ShowAfterGroup = templates.ShowAfterGroup
|
|||
|
groupDatas.UnfinishCount = 0
|
|||
|
end
|
|||
|
|
|||
|
if v.State ~= XTaskManager.TaskState.Finish and v.State ~= XTaskManager.TaskState.Invalid then
|
|||
|
groupDatas.UnfinishCount = groupDatas.UnfinishCount + 1
|
|||
|
end
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
for _, groupDatas in pairs(DormDailyGroupTaskData) do
|
|||
|
if groupDatas.ShowAfterGroup > 0 then
|
|||
|
DormDailyGroupTaskData[groupDatas.ShowAfterGroup].NextGroupId = groupDatas.GroupId
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
local currentGoupId = headGroupId
|
|||
|
local currentGroupDatas = DormDailyGroupTaskData[currentGoupId]
|
|||
|
while currentGroupDatas and currentGroupDatas.UnfinishCount <= 0 do
|
|||
|
currentGoupId = currentGroupDatas.NextGroupId
|
|||
|
if currentGoupId == nil then break end
|
|||
|
currentGroupDatas = DormDailyGroupTaskData[currentGoupId]
|
|||
|
end
|
|||
|
return currentGoupId
|
|||
|
end
|
|||
|
|
|||
|
function XTaskManager.GetCurrentDormStoryTaskGroupId()
|
|||
|
XTaskManager.ResetDormStoryGroupTaskData()
|
|||
|
|
|||
|
local headGroupId = 1
|
|||
|
for _, v in pairs(DormNormalTaskData) do
|
|||
|
local templates = XTaskManager.GetTaskTemplate(v.Id)
|
|||
|
if templates.GroupId > 0 then
|
|||
|
if templates.ShowAfterGroup <= 0 then
|
|||
|
headGroupId = templates.GroupId
|
|||
|
end
|
|||
|
local groupDatas = DormStoryGroupTaskData[templates.GroupId]
|
|||
|
if groupDatas == nil then
|
|||
|
DormStoryGroupTaskData[templates.GroupId] = {}
|
|||
|
groupDatas = DormStoryGroupTaskData[templates.GroupId]
|
|||
|
groupDatas.GroupId = templates.GroupId
|
|||
|
groupDatas.ShowAfterGroup = templates.ShowAfterGroup
|
|||
|
groupDatas.UnfinishCount = 0
|
|||
|
end
|
|||
|
|
|||
|
if v.State ~= XTaskManager.TaskState.Finish and v.State ~= XTaskManager.TaskState.Invalid then
|
|||
|
groupDatas.UnfinishCount = groupDatas.UnfinishCount + 1
|
|||
|
end
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
for _, groupDatas in pairs(DormStoryGroupTaskData) do
|
|||
|
if groupDatas.ShowAfterGroup > 0 then
|
|||
|
DormStoryGroupTaskData[groupDatas.ShowAfterGroup].NextGroupId = groupDatas.GroupId
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
local currentGoupId = headGroupId
|
|||
|
local currentGroupDatas = DormStoryGroupTaskData[currentGoupId]
|
|||
|
while currentGroupDatas and currentGroupDatas.UnfinishCount <= 0 do
|
|||
|
currentGoupId = currentGroupDatas.NextGroupId
|
|||
|
if currentGoupId == nil then break end
|
|||
|
currentGroupDatas = DormStoryGroupTaskData[currentGoupId]
|
|||
|
end
|
|||
|
return currentGoupId
|
|||
|
end
|
|||
|
-- 检查主线剧情任务的红点
|
|||
|
function XTaskManager.CheckStoryTaskByGroup()
|
|||
|
-- 只检查当前组和当前没有组id的任务时候可以领取
|
|||
|
local currTaskGroupId = XDataCenter.TaskManager.GetCurrentStoryTaskGroupId()
|
|||
|
|
|||
|
for _, taskInfo in pairs(StoryTaskData) do
|
|||
|
local templates = XDataCenter.TaskManager.GetTaskTemplate(taskInfo.Id)
|
|||
|
-- 分组任务和非组任务
|
|||
|
if templates.GroupId > 0 then
|
|||
|
--组任务
|
|||
|
if currTaskGroupId and currTaskGroupId == templates.GroupId then
|
|||
|
if taskInfo ~= nil and currTaskGroupId == templates.GroupId and taskInfo.State == XTaskManager.TaskState.Achieved then
|
|||
|
return true
|
|||
|
end
|
|||
|
end
|
|||
|
else
|
|||
|
--非组任务
|
|||
|
if taskInfo ~= nil and taskInfo.State == XTaskManager.TaskState.Achieved then
|
|||
|
return true
|
|||
|
end
|
|||
|
end
|
|||
|
end
|
|||
|
return false
|
|||
|
end
|
|||
|
|
|||
|
|
|||
|
function XTaskManager.GetTaskTemplate(templateId)
|
|||
|
local template = XTaskConfig.GetTaskTemplate()[templateId]
|
|||
|
if not template then
|
|||
|
local path = XTaskConfig.GetTaskPath()
|
|||
|
XLog.ErrorTableDataNotFound("XTaskManager.GetTaskTemplate", "template", path, "templateId", tostring(templateId))
|
|||
|
else
|
|||
|
return template
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
function XTaskManager.GetShowAfterTaskId(templateId)
|
|||
|
local template = XTaskManager.GetTaskTemplate(templateId)
|
|||
|
if template then
|
|||
|
return template.ShowAfterTaskId
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
function XTaskManager.SyncTasks(data)
|
|||
|
if data.TaskLimitIdActiveInfos then
|
|||
|
for _, v in pairs(data.TaskLimitIdActiveInfos) do
|
|||
|
LinkTaskTimeDict[v.TaskLimitId] = v.ActiveTime
|
|||
|
XEventManager.DispatchEvent(XEventId.EVENT_ACTIVITY_INFO_UPDATE)
|
|||
|
end
|
|||
|
end
|
|||
|
local tasks = data.Tasks
|
|||
|
XTool.LoopCollection(tasks.Tasks, function(value)
|
|||
|
FinishedTasks[value.Id] = value.State == XTaskManager.TaskState.Finish
|
|||
|
local taskType = XTaskManager.GetTaskTemplate(value.Id).Type
|
|||
|
TotalTaskData[value.Id] = value
|
|||
|
XAppEventManager.TaskAppLogEvent(value.Id,value.State)
|
|||
|
if taskType == XTaskManager.TaskType.Story then
|
|||
|
StoryTaskData[value.Id] = value
|
|||
|
elseif taskType == XTaskManager.TaskType.Daily then
|
|||
|
DailyTaskData[value.Id] = value
|
|||
|
elseif taskType == XTaskManager.TaskType.Weekly then
|
|||
|
WeeklyTaskData[value.Id] = value
|
|||
|
elseif taskType == XTaskManager.TaskType.Activity then
|
|||
|
ActivityTaskData[value.Id] = value
|
|||
|
elseif taskType == XTaskManager.TaskType.NewPlayer then
|
|||
|
NewPlayerTaskData[value.Id] = value
|
|||
|
elseif taskType == XTaskManager.TaskType.Achievement then
|
|||
|
AchvTaskData[value.Id] = value
|
|||
|
elseif taskType == XTaskManager.TaskType.ArenaChallenge then
|
|||
|
ArenaTaskData[value.Id] = value
|
|||
|
elseif taskType == XTaskManager.TaskType.TimeLimit then
|
|||
|
TimeLimitTaskData[value.Id] = value
|
|||
|
elseif taskType == XTaskManager.TaskType.DormDaily then
|
|||
|
DormDailyTaskData[value.Id] = value
|
|||
|
elseif taskType == XTaskManager.TaskType.DormNormal then
|
|||
|
DormNormalTaskData[value.Id] = value
|
|||
|
elseif taskType == XTaskManager.TaskType.BabelTower then
|
|||
|
BabelTowerTaskData[value.Id] = value
|
|||
|
elseif taskType == XTaskManager.TaskType.RogueLike then
|
|||
|
RogueLikeTaskData[value.Id] = value
|
|||
|
elseif taskType == XTaskManager.TaskType.GuildDaily then
|
|||
|
GuildDailyTaskData[value.Id] = value
|
|||
|
elseif taskType == XTaskManager.TaskType.GuildMainly then
|
|||
|
GuildMainlyTaskData[value.Id] = value
|
|||
|
elseif taskType == XTaskManager.TaskType.GuildWeekly then
|
|||
|
GuildWeeklyTaskData[value.Id] = value
|
|||
|
elseif taskType == XTaskManager.TaskType.Regression then
|
|||
|
local id = value.Id
|
|||
|
local regressionTaskType = XRegressionConfigs.GetTaskTypeById(id)
|
|||
|
RegressionTaskData[id] = value
|
|||
|
if RegressionTaskCanGetDic[id] then
|
|||
|
if value.State ~= XDataCenter.TaskManager.TaskState.Achieved then
|
|||
|
RegressionTaskTypeToRedPointCountDic[regressionTaskType] = RegressionTaskTypeToRedPointCountDic[regressionTaskType] - 1
|
|||
|
RegressionTaskRedPointCount = RegressionTaskRedPointCount - 1
|
|||
|
RegressionTaskCanGetDic[id] = nil
|
|||
|
end
|
|||
|
else
|
|||
|
if value.State == XDataCenter.TaskManager.TaskState.Achieved then
|
|||
|
RegressionTaskCanGetDic[id] = true
|
|||
|
RegressionTaskTypeToRedPointCountDic[regressionTaskType] = RegressionTaskTypeToRedPointCountDic[regressionTaskType] or 0
|
|||
|
RegressionTaskTypeToRedPointCountDic[regressionTaskType] = RegressionTaskTypeToRedPointCountDic[regressionTaskType] + 1
|
|||
|
RegressionTaskRedPointCount = RegressionTaskRedPointCount + 1
|
|||
|
end
|
|||
|
end
|
|||
|
elseif taskType == XTaskManager.TaskType.ArenaOnlineWeekly then
|
|||
|
ArenaOnlineWeeklyTaskData[value.Id] = value
|
|||
|
elseif taskType == XTaskManager.TaskType.InfestorWeekly then
|
|||
|
InfestorWeeklyTaskData[value.Id] = value
|
|||
|
elseif taskType == XTaskManager.TaskType.WorldBoss then
|
|||
|
WorldBossTaskData[value.Id] = value
|
|||
|
elseif taskType == XTaskManager.TaskType.RpgTower then
|
|||
|
RpgTowerTaskData[value.Id] = value
|
|||
|
elseif taskType == XTaskManager.TaskType.MentorShipGrow then
|
|||
|
MentorGrowTaskData[value.Id] = value
|
|||
|
elseif taskType == XTaskManager.TaskType.MentorShipGraduate then
|
|||
|
MentorGraduateTaskData[value.Id] = value
|
|||
|
elseif taskType == XTaskManager.TaskType.MentorShipWeekly then
|
|||
|
MentorWeeklyTaskData[value.Id] = value
|
|||
|
elseif taskType == XTaskManager.TaskType.ZhouMu then
|
|||
|
ZhouMuTaskData[value.Id] = value
|
|||
|
elseif taskType == XTaskManager.TaskType.NieR then
|
|||
|
NieRTaskData[value.Id] = value
|
|||
|
elseif taskType == XTaskManager.TaskType.Pokemon then
|
|||
|
PokemonTaskData[value.Id] = value
|
|||
|
elseif taskType == XTaskManager.TaskType.Couplet then
|
|||
|
CoupletTaskData[value.Id] = value
|
|||
|
elseif taskType == XTaskManager.TaskType.SimulatedCombat then
|
|||
|
SimulatedCombatTaskData[value.Id] = value
|
|||
|
elseif taskType == XTaskManager.TaskType.WhiteValentine then
|
|||
|
WhiteValentineTaskData[value.Id] = value
|
|||
|
elseif taskType == XTaskManager.TaskType.FingerGuessing then
|
|||
|
FingerGuessingTaskData[value.Id] = value
|
|||
|
elseif taskType == XTaskManager.TaskType.MoeWarDaily then
|
|||
|
MoeWarDailyTaskData[value.Id] = value
|
|||
|
elseif taskType == XTaskManager.TaskType.MoeWarNormal then
|
|||
|
MoeWarNormalTaskData[value.Id] = value
|
|||
|
elseif taskType == XTaskManager.TaskType.PokerGuessing or taskType == XTaskManager.TaskType.PokerGuessingCollection then
|
|||
|
PokerGuessingTaskData[value.Id] = value
|
|||
|
elseif taskType == XTaskManager.TaskType.Passport then
|
|||
|
PassportTaskData[value.Id] = value
|
|||
|
elseif taskType == XTaskManager.TaskType.LivWarmSoundsActivity then
|
|||
|
LivWarmSoundsActivityTaskData[value.Id] = value
|
|||
|
elseif taskType == XTaskManager.TaskType.BossOnLine then
|
|||
|
BossOnlineTaskData[value.Id] = value
|
|||
|
else
|
|||
|
TaskDataGroup[taskType][value.Id] = value
|
|||
|
end
|
|||
|
end)
|
|||
|
XEventManager.DispatchEvent(XEventId.EVENT_TASK_SYNC)
|
|||
|
CsXGameEventManager.Instance:Notify(XEventId.EVENT_TASK_SYNC)
|
|||
|
end
|
|||
|
--根据任务类型判断是否有奖励可以领取
|
|||
|
function XTaskManager.GetIsRewardFor(taskType)
|
|||
|
local taskList = nil
|
|||
|
if taskType == XTaskManager.TaskType.Story then
|
|||
|
taskList = StoryTaskData
|
|||
|
elseif taskType == XTaskManager.TaskType.Daily then
|
|||
|
taskList = DailyTaskData
|
|||
|
elseif taskType == XTaskManager.TaskType.Activity then
|
|||
|
taskList = ActivityTaskData
|
|||
|
elseif taskType == XTaskManager.TaskType.Achievement then
|
|||
|
taskList = AchvTaskData
|
|||
|
elseif taskType == XTaskManager.TaskType.ArenaChallenge then
|
|||
|
taskList = ArenaTaskData
|
|||
|
elseif taskType == XTaskManager.TaskType.TimeLimit then
|
|||
|
taskList = TimeLimitTaskData
|
|||
|
elseif taskType == XTaskManager.TaskType.DormDaily then
|
|||
|
taskList = DormDailyTaskData
|
|||
|
elseif taskType == XTaskManager.TaskType.DormNormal then
|
|||
|
taskList = DormNormalTaskData
|
|||
|
elseif taskType == XTaskManager.TaskType.BabelTower then
|
|||
|
taskList = BabelTowerTaskData
|
|||
|
elseif taskType == XTaskManager.TaskType.RogueLike then
|
|||
|
taskList = RogueLikeTaskData
|
|||
|
elseif taskType == XTaskManager.TaskType.GuildDaily then
|
|||
|
taskList = GuildDailyTaskData
|
|||
|
elseif taskType == XTaskManager.TaskType.GuildMainly then
|
|||
|
taskList = GuildMainlyTaskData
|
|||
|
elseif taskType == XTaskManager.TaskType.GuildWeekly then
|
|||
|
taskList = GuildWeeklyTaskData
|
|||
|
elseif taskType == XTaskManager.TaskType.ArenaOnlineWeekly then
|
|||
|
taskList = XTaskManager.GetArenaOnlineWeeklyTaskList()
|
|||
|
elseif taskType == XTaskManager.TaskType.InfestorWeekly then
|
|||
|
taskList = XTaskManager.GetInfestorWeeklyTaskList()
|
|||
|
elseif taskType == XTaskManager.TaskType.WorldBoss then
|
|||
|
taskList = WorldBossTaskData
|
|||
|
elseif taskType == XTaskManager.TaskType.RpgTower then
|
|||
|
taskList = RpgTowerTaskData
|
|||
|
elseif taskType == XTaskManager.TaskType.MentorShipGrow then
|
|||
|
taskList = MentorGrowTaskData
|
|||
|
elseif taskType == XTaskManager.TaskType.MentorShipGraduate then
|
|||
|
taskList = MentorGraduateTaskData
|
|||
|
elseif taskType == XTaskManager.TaskType.MentorShipWeekly then
|
|||
|
taskList = MentorWeeklyTaskData
|
|||
|
elseif taskType == XTaskManager.TaskType.ZhouMu then
|
|||
|
taskList = ZhouMuTaskData
|
|||
|
elseif taskType == XTaskManager.TaskType.NieR then
|
|||
|
taskList = NieRTaskData
|
|||
|
elseif taskType == XTaskManager.TaskType.Pokemon then
|
|||
|
taskList = PokemonTaskData
|
|||
|
elseif taskType == XTaskManager.TaskType.Couplet then
|
|||
|
taskList = CoupletTaskData
|
|||
|
elseif taskType == XTaskManager.TaskType.SimulatedCombat then
|
|||
|
taskList = SimulatedCombatTaskData
|
|||
|
elseif taskType == XTaskManager.TaskType.WhiteValentine then
|
|||
|
taskList = WhiteValentineTaskData
|
|||
|
elseif taskType == XTaskManager.TaskType.FingerGuessing then
|
|||
|
taskList = FingerGuessingTaskData
|
|||
|
elseif taskType == XTaskManager.TaskType.MoeWarDaily then
|
|||
|
taskList = MoeWarDailyTaskData
|
|||
|
elseif taskType == XTaskManager.TaskType.MoeWarNormal then
|
|||
|
taskList = MoeWarNormalTaskData
|
|||
|
elseif taskType == XTaskManager.TaskType.PokerGuessing or taskType == XTaskManager.TaskType.PokerGuessingCollection then
|
|||
|
taskList = PokerGuessingTaskData
|
|||
|
elseif taskType == XTaskManager.TaskType.Passport then
|
|||
|
taskList = PassportTaskData
|
|||
|
elseif taskType == XTaskManager.TaskType.LivWarmSoundsActivity then
|
|||
|
taskList = LivWarmSoundsActivityTaskData
|
|||
|
else
|
|||
|
taskList = TaskDataGroup[taskType]
|
|||
|
end
|
|||
|
|
|||
|
if taskList == nil then
|
|||
|
return false
|
|||
|
end
|
|||
|
|
|||
|
if taskType == XTaskManager.TaskType.Story then
|
|||
|
return XTaskManager.CheckStoryTaskByGroup()
|
|||
|
end
|
|||
|
|
|||
|
local res = false
|
|||
|
for _, taskInfo in pairs(taskList) do
|
|||
|
if taskInfo ~= nil and taskInfo.State == XTaskManager.TaskState.Achieved then
|
|||
|
res = true
|
|||
|
if taskType == XTaskManager.TaskType.Story then
|
|||
|
-- 剧情模式判断有无可领取时 必须判断是否是当前进度中的章节任务
|
|||
|
res = res and XTaskManager.GetCurrentStoryTaskGroupId() == XDataCenter.TaskManager.GetTaskTemplate(taskInfo.Id).GroupId
|
|||
|
end
|
|||
|
break
|
|||
|
end
|
|||
|
end
|
|||
|
end
|
|||
|
--获取周奖励
|
|||
|
function XTaskManager.GetIsWeekReward()
|
|||
|
local activeness = XDataCenter.ItemManager.GetWeeklyActiveness().Count
|
|||
|
local rewardIds = XTaskManager.GetWeeklyActivenessRewardIds()
|
|||
|
for index = 1, #rewardIds do
|
|||
|
if activeness >= rewardIds[index] then
|
|||
|
return true
|
|||
|
end
|
|||
|
end
|
|||
|
return false
|
|||
|
end
|
|||
|
|
|||
|
function XTaskManager.FinishTask(taskId, cb)
|
|||
|
cb = cb or function() end
|
|||
|
XNetwork.Call("FinishTaskRequest", { TaskId = taskId }, function(reply)
|
|||
|
if reply.Code ~= XCode.Success then
|
|||
|
XUiManager.TipCode(reply.Code)
|
|||
|
XEventManager.DispatchEvent(XEventId.EVENT_TASK_FINISH_FAIL)
|
|||
|
--BDC
|
|||
|
CS.XHeroBdcAgent.BdcAwardButtonClick(taskId, 2)
|
|||
|
return
|
|||
|
end
|
|||
|
--BDC
|
|||
|
CS.XHeroBdcAgent.BdcAwardButtonClick(taskId, 1)
|
|||
|
CsXGameEventManager.Instance:Notify(XEventId.EVENT_FINISH_TASK)
|
|||
|
XEventManager.DispatchEvent(XEventId.EVENT_FINISH_TASK)
|
|||
|
|
|||
|
cb(reply.RewardGoodsList)
|
|||
|
|
|||
|
end)
|
|||
|
end
|
|||
|
|
|||
|
--批量领取任务奖励
|
|||
|
function XTaskManager.FinishMultiTaskRequest(taskIds, cb, notTip)
|
|||
|
cb = cb or function() end
|
|||
|
XNetwork.Call("FinishMultiTaskRequest", { TaskIds = taskIds }, function(reply)
|
|||
|
if reply.Code ~= XCode.Success then
|
|||
|
if not notTip then
|
|||
|
XUiManager.TipCode(reply.Code)
|
|||
|
end
|
|||
|
XEventManager.DispatchEvent(XEventId.EVENT_TASK_FINISH_FAIL)
|
|||
|
return
|
|||
|
end
|
|||
|
|
|||
|
cb(reply.RewardGoodsList)
|
|||
|
XEventManager.DispatchEvent(XEventId.EVENT_FINISH_MULTI, true)
|
|||
|
end)
|
|||
|
end
|
|||
|
|
|||
|
--获取历程奖励
|
|||
|
function XTaskManager.GetCourseReward(stageId, cb)
|
|||
|
cb = cb or function() end
|
|||
|
XNetwork.Call("GetCourseRewardRequest", { StageId = stageId }, function(reply)
|
|||
|
if reply.Code ~= XCode.Success then
|
|||
|
XUiManager.TipCode(reply.Code)
|
|||
|
return
|
|||
|
end
|
|||
|
|
|||
|
-- 这里顺序不要变
|
|||
|
local allRewardGet = XTaskManager.SetCourseData(stageId)
|
|||
|
if cb then cb(allRewardGet) end
|
|||
|
|
|||
|
XUiManager.OpenUiObtain(reply.RewardGoodsList)
|
|||
|
XEventManager.DispatchEvent(XEventId.EVENT_TASK_COURSE_REWAED)
|
|||
|
end)
|
|||
|
end
|
|||
|
|
|||
|
function XTaskManager.GetActivenessReward(index, rewardId, rewardType, cb)
|
|||
|
index = index - 1 -- 客户端从1开始,服务端从0开始
|
|||
|
cb = cb or function() end
|
|||
|
XNetwork.Call("GetActivenessRewardRequest", { StageIndex = index, RewardId = rewardId, RewardType = rewardType }, function(reply)
|
|||
|
if reply.Code ~= XCode.Success then
|
|||
|
XUiManager.TipCode(reply.Code)
|
|||
|
return
|
|||
|
end
|
|||
|
|
|||
|
cb()
|
|||
|
|
|||
|
XEventManager.DispatchEvent(XEventId.EVENT_TASK_SYNC)
|
|||
|
CsXGameEventManager.Instance:Notify(XEventId.EVENT_TASK_SYNC)
|
|||
|
XUiManager.OpenUiObtain(reply.RewardGoodsList)
|
|||
|
end)
|
|||
|
end
|
|||
|
|
|||
|
----NewPlayerTask
|
|||
|
function XTaskManager.GetNewPlayerTaskTalkConfig(group)
|
|||
|
return XTaskConfig.GetNewPlayerTaskTalkTemplate()[group]
|
|||
|
end
|
|||
|
|
|||
|
function XTaskManager.GetNewPlayerTaskGroup(group)
|
|||
|
return XTaskConfig.GetNewPlayerTaskGroupTemplate()[group]
|
|||
|
end
|
|||
|
|
|||
|
function XTaskManager.GetNewbiePlayTaskReddotByOpenDay(openDay)
|
|||
|
|
|||
|
if XPlayer.NewPlayerTaskActiveDay == nil then
|
|||
|
return false
|
|||
|
end
|
|||
|
|
|||
|
if XPlayer.NewPlayerTaskActiveDay < openDay then
|
|||
|
return false
|
|||
|
end
|
|||
|
|
|||
|
local tasks = XTaskConfig.GetNewPlayerTaskGroupTemplate()[openDay]
|
|||
|
if not tasks or not tasks.TaskId then return false end
|
|||
|
|
|||
|
for _, id in pairs(tasks.TaskId) do
|
|||
|
local stateTask = XTaskManager.GetTaskDataById(id)
|
|||
|
if stateTask and stateTask.State == XTaskManager.TaskState.Achieved then
|
|||
|
return true
|
|||
|
end
|
|||
|
end
|
|||
|
return false
|
|||
|
end
|
|||
|
|
|||
|
function XTaskManager.GetNewPlayerTaskListByGroup(group)
|
|||
|
local tTaskGroupConfig = XTaskConfig.GetNewPlayerTaskGroupTemplate()[group]
|
|||
|
if not tTaskGroupConfig then return end
|
|||
|
local tTaskIdList = tTaskGroupConfig.TaskId
|
|||
|
if not tTaskIdList then return end
|
|||
|
local tCurGroupTaskList = {}
|
|||
|
for _, v in ipairs(tTaskIdList) do
|
|||
|
local template = XTaskConfig.GetTaskTemplate()[v]
|
|||
|
local preId = template and template.ShowAfterTaskId
|
|||
|
preId = preId and preId > 0 and preId
|
|||
|
local preTask = preId and NewPlayerTaskData[preId]
|
|||
|
if not preTask or preTask and preTask.State == XTaskManager.TaskState.Finish then
|
|||
|
tableInsert(tCurGroupTaskList, v)
|
|||
|
end
|
|||
|
end
|
|||
|
tableSort(tCurGroupTaskList, function(aId, bId)
|
|||
|
local a = NewPlayerTaskData[aId]
|
|||
|
local b = NewPlayerTaskData[bId]
|
|||
|
local fCallfunc = function(aId2, bId2)
|
|||
|
return aId2 < bId2
|
|||
|
end
|
|||
|
if a and b then
|
|||
|
if a.State ~= b.State then
|
|||
|
if a.State == XTaskManager.TaskState.Achieved then
|
|||
|
return true
|
|||
|
end
|
|||
|
if b.State == XTaskManager.TaskState.Achieved then
|
|||
|
return false
|
|||
|
end
|
|||
|
if a.State == XTaskManager.TaskState.Finish or a.State == XTaskManager.TaskState.Invalid then
|
|||
|
return false
|
|||
|
end
|
|||
|
if b.State == XTaskManager.TaskState.Finish or b.State == XTaskManager.TaskState.Invalid then
|
|||
|
return true
|
|||
|
end
|
|||
|
else
|
|||
|
return fCallfunc(aId, bId)
|
|||
|
end
|
|||
|
else
|
|||
|
if a and a.State == XTaskManager.TaskState.Finish then
|
|||
|
return false
|
|||
|
end
|
|||
|
if b and b.State == XTaskManager.TaskState.Finish then
|
|||
|
return true
|
|||
|
end
|
|||
|
return fCallfunc(aId, bId)
|
|||
|
end
|
|||
|
|
|||
|
end)
|
|||
|
return tCurGroupTaskList
|
|||
|
end
|
|||
|
|
|||
|
function XTaskManager.GetNewPlayerGroupTaskStatus(group)
|
|||
|
|
|||
|
if XPlayer.NewPlayerTaskActiveDay < group then
|
|||
|
return XTaskManager.NewPlayerTaskGroupState.Lock
|
|||
|
end
|
|||
|
|
|||
|
local tTaskGroupConfig = XTaskConfig.GetNewPlayerTaskGroupTemplate()[group]
|
|||
|
if not tTaskGroupConfig then return end
|
|||
|
local tTaskIdList = tTaskGroupConfig.TaskId
|
|||
|
if not tTaskIdList then return end
|
|||
|
local finishCount = 0
|
|||
|
for _, v in ipairs(tTaskIdList) do
|
|||
|
local tTaskData = NewPlayerTaskData[v]
|
|||
|
if not tTaskData then
|
|||
|
return XTaskManager.NewPlayerTaskGroupState.Lock
|
|||
|
end
|
|||
|
local template = XTaskManager.GetTaskTemplate(tTaskData.Id)
|
|||
|
local preId = template and template.ShowAfterTaskId
|
|||
|
local preTask = preId == 0 and nil or TotalTaskData[preId]
|
|||
|
|
|||
|
if preTask then
|
|||
|
if preTask.State == XTaskManager.TaskState.Finish and tTaskData.State == XTaskManager.TaskState.Achieved then
|
|||
|
return XTaskManager.NewPlayerTaskGroupState.HasAward
|
|||
|
end
|
|||
|
elseif FinishedTasks[preId] then
|
|||
|
return XTaskManager.NewPlayerTaskGroupState.HasAward
|
|||
|
end
|
|||
|
|
|||
|
if not preTask and tTaskData.State == XTaskManager.TaskState.Achieved then
|
|||
|
return XTaskManager.NewPlayerTaskGroupState.HasAward
|
|||
|
end
|
|||
|
|
|||
|
if tTaskData.State == XTaskManager.TaskState.Finish then
|
|||
|
finishCount = finishCount + 1
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
if finishCount == #tTaskIdList then
|
|||
|
return XTaskManager.NewPlayerTaskGroupState.AllFinish
|
|||
|
end
|
|||
|
|
|||
|
return XTaskManager.NewPlayerTaskGroupState.AllTodo
|
|||
|
end
|
|||
|
|
|||
|
function XTaskManager.FindNewPlayerTaskTalkContent(group)
|
|||
|
local config = XTaskConfig.GetNewPlayerTaskTalkTemplate()[group]
|
|||
|
if not config then
|
|||
|
return
|
|||
|
end
|
|||
|
local tTaskGroupConfig = XTaskConfig.GetNewPlayerTaskGroupTemplate()[group]
|
|||
|
if not tTaskGroupConfig then return end
|
|||
|
local tTaskIdList = tTaskGroupConfig.TaskId
|
|||
|
if not tTaskIdList then return end
|
|||
|
local finishCount = 0
|
|||
|
for _, v in ipairs(tTaskIdList) do
|
|||
|
local tTaskData = NewPlayerTaskData[v]
|
|||
|
if tTaskData and tTaskData.State == XTaskManager.TaskState.Finish then
|
|||
|
finishCount = finishCount + 1
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
local index = 1
|
|||
|
for i, v in ipairs(config.GetCount) do
|
|||
|
if finishCount >= v then
|
|||
|
index = i
|
|||
|
end
|
|||
|
end
|
|||
|
return config.TalkContent[index], config
|
|||
|
end
|
|||
|
|
|||
|
function XTaskManager.SetNewPlayerTaskActiveUi(group)
|
|||
|
XNetwork.Call("SetNewPlayerTaskActiveUiRequest", { Group = group }, function(reply)
|
|||
|
if reply.Code ~= XCode.Success then
|
|||
|
XUiManager.TipCode(reply.Code)
|
|||
|
return
|
|||
|
end
|
|||
|
XPlayer.SetNewPlayerTaskActiveUi(reply.Result)
|
|||
|
end)
|
|||
|
end
|
|||
|
|
|||
|
function XTaskManager.CheckTaskFinished(taskId)
|
|||
|
local taskData = XTaskManager.GetTaskDataById(taskId)
|
|||
|
return taskData and taskData.State == XTaskManager.TaskState.Finish
|
|||
|
end
|
|||
|
|
|||
|
function XTaskManager.CheckTaskAchieved(taskId)
|
|||
|
local taskData = XTaskManager.GetTaskDataById(taskId)
|
|||
|
return taskData and taskData.State == XTaskManager.TaskState.Achieved
|
|||
|
end
|
|||
|
|
|||
|
function XTaskManager.GetFinalChapterId()
|
|||
|
for k, v in pairs(CourseInfos or {}) do
|
|||
|
if v.NextChapterId == nil then
|
|||
|
return k
|
|||
|
end
|
|||
|
end
|
|||
|
return nil
|
|||
|
end
|
|||
|
|
|||
|
function XTaskManager.CheckNewbieActivenessAvailable()
|
|||
|
local currentCount = XDataCenter.ItemManager.GetCount(ITEM_NEWBIE_PROGRESS_ID)
|
|||
|
for _, v in pairs(XTaskConfig.GetTaskNewbieActivenessTemplate().Activeness or {}) do
|
|||
|
if not XTaskManager.CheckNewbieActivenessRecord(v) and currentCount >= v then
|
|||
|
return true
|
|||
|
end
|
|||
|
end
|
|||
|
return false
|
|||
|
end
|
|||
|
|
|||
|
function XTaskManager.CheckNewbieTaskAvailable()
|
|||
|
if not XFunctionManager.JudgeOpen(XFunctionManager.FunctionName.Target) then
|
|||
|
return false
|
|||
|
end
|
|||
|
|
|||
|
if XTaskManager.CheckNewbieActivenessAvailable() then
|
|||
|
return true
|
|||
|
end
|
|||
|
|
|||
|
for _, groupDatas in pairs(XTaskConfig.GetNewPlayerTaskGroupTemplate() or {}) do
|
|||
|
for _, taskId in pairs(groupDatas.TaskId or {}) do
|
|||
|
local stateTask = XTaskManager.GetTaskDataById(taskId)
|
|||
|
if stateTask and stateTask.State ~= XTaskManager.TaskState.Finish and stateTask.State ~= XTaskManager.TaskState.Invalid then
|
|||
|
return true
|
|||
|
end
|
|||
|
end
|
|||
|
end
|
|||
|
return false
|
|||
|
end
|
|||
|
|
|||
|
function XTaskManager.CheckNewbieActivenessRecord(activenessId)
|
|||
|
for _, record in pairs(NewbieActivenessRecord or {}) do
|
|||
|
if activenessId == record then
|
|||
|
return true
|
|||
|
end
|
|||
|
end
|
|||
|
return false
|
|||
|
end
|
|||
|
|
|||
|
function XTaskManager.UpdateNewbieActivenessRecord(activenessId)
|
|||
|
for _, record in pairs(NewbieActivenessRecord or {}) do
|
|||
|
if activenessId == record then
|
|||
|
return
|
|||
|
end
|
|||
|
end
|
|||
|
NewbieActivenessRecord[#NewbieActivenessRecord + 1] = activenessId
|
|||
|
end
|
|||
|
|
|||
|
function XTaskManager.GetStoryTaskShowId()
|
|||
|
local groupId = XTaskManager.GetCurrentStoryTaskGroupId()
|
|||
|
if groupId == nil or groupId <= 0 then
|
|||
|
return 0
|
|||
|
end
|
|||
|
-- 有没有主题任务。
|
|||
|
local maxPriority = 0
|
|||
|
local currentTask = 0
|
|||
|
for _, v in pairs(StoryTaskData) do
|
|||
|
local templates = XTaskManager.GetTaskTemplate(v.Id)
|
|||
|
if templates.GroupId == groupId and templates.ShowType == 1 then
|
|||
|
if v.State ~= XTaskManager.TaskState.Finish and v.State ~= XTaskManager.TaskState.Invalid then
|
|||
|
if templates.Priority >= maxPriority then
|
|||
|
maxPriority = templates.Priority
|
|||
|
currentTask = v.Id
|
|||
|
end
|
|||
|
end
|
|||
|
end
|
|||
|
end
|
|||
|
return currentTask
|
|||
|
end
|
|||
|
|
|||
|
function XTaskManager.SaveNewPlayerHint(key, value)
|
|||
|
if XPlayer.Id then
|
|||
|
key = string.format("%s_%s", tostring(XPlayer.Id), key)
|
|||
|
CS.UnityEngine.PlayerPrefs.SetInt(key, value)
|
|||
|
CS.UnityEngine.PlayerPrefs.Save()
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
function XTaskManager.GetNewPlayerHint(key, defaultValue)
|
|||
|
if XPlayer.Id then
|
|||
|
key = string.format("%s_%s", tostring(XPlayer.Id), key)
|
|||
|
if CS.UnityEngine.PlayerPrefs.HasKey(key) then
|
|||
|
local newPlayerHint = CS.UnityEngine.PlayerPrefs.GetInt(key)
|
|||
|
return (newPlayerHint == nil or newPlayerHint == 0) and defaultValue or newPlayerHint
|
|||
|
end
|
|||
|
end
|
|||
|
return defaultValue
|
|||
|
end
|
|||
|
|
|||
|
function XTaskManager.GetNewPlayerRewardReq(activeness, rewardList, cb)
|
|||
|
XNetwork.Call("GetNewPlayerRewardRequest", { Activeness = activeness }, function(response)
|
|||
|
cb = cb or function() end
|
|||
|
if response.Code == XCode.Success then
|
|||
|
XUiManager.OpenUiObtain(rewardList, CS.XTextManager.GetText("DailyActiveRewardTitle"))
|
|||
|
XTaskManager.UpdateNewbieActivenessRecord(activeness)
|
|||
|
cb()
|
|||
|
XEventManager.DispatchEvent(XEventId.EVENT_NEWBIETASK_PROGRESSCHANGED)
|
|||
|
else
|
|||
|
XUiManager.TipCode(response.Code)
|
|||
|
end
|
|||
|
end)
|
|||
|
end
|
|||
|
|
|||
|
function XTaskManager.GetDormTaskDailyListData()
|
|||
|
return XTaskManager.SortDormDailyTaskByGroup(XTaskManager.GetDormDailyTaskList()) or {}
|
|||
|
end
|
|||
|
|
|||
|
function XTaskManager.GetDormTaskStoryListData()
|
|||
|
return XTaskManager.SortDormStoryTaskByGroup(XTaskManager.GetDormNormalTaskList()) or {}
|
|||
|
end
|
|||
|
|
|||
|
function XTaskManager.SortDormStoryTaskByGroup(tasks)
|
|||
|
local currTaskGroupId = XDataCenter.TaskManager.GetCurrentDormStoryTaskGroupId()
|
|||
|
if currTaskGroupId == nil or currTaskGroupId <= 0 then return tasks end
|
|||
|
return XTaskManager.SortDormTask(tasks, currTaskGroupId)
|
|||
|
end
|
|||
|
|
|||
|
function XTaskManager.SortDormDailyTaskByGroup(tasks)
|
|||
|
local currTaskGroupId = XDataCenter.TaskManager.GetCurrentDormDailyTaskGroupId()
|
|||
|
if currTaskGroupId == nil or currTaskGroupId <= 0 then return tasks end
|
|||
|
return XTaskManager.SortDormTask(tasks, currTaskGroupId)
|
|||
|
end
|
|||
|
|
|||
|
function XTaskManager.SortDormTask(tasks, currTaskGroupId)
|
|||
|
local sortedTasks = {}
|
|||
|
-- 过滤,留下组id相同,没有组id的任务
|
|||
|
for _, v in pairs(tasks) do
|
|||
|
local templates = XDataCenter.TaskManager.GetTaskTemplate(v.Id)
|
|||
|
if templates.GroupId <= 0 or templates.GroupId == currTaskGroupId then
|
|||
|
|
|||
|
v.SortWeight = 1
|
|||
|
v.SortWeight = (templates.GroupId > 0) and 2 or v.SortWeight
|
|||
|
v.SortWeight = (v.State == XDataCenter.TaskManager.TaskState.Achieved) and 3 or v.SortWeight
|
|||
|
v.SortWeight = (templates.GroupTheme == 1) and 4 or v.SortWeight
|
|||
|
v.GroupTheme = templates.GroupTheme
|
|||
|
tableInsert(sortedTasks, v)
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
-- 排序,主题任务,可领取的任务,不能领取的任务
|
|||
|
tableSort(sortedTasks, function(taskA, taskB)
|
|||
|
local templatesTaskA = XDataCenter.TaskManager.GetTaskTemplate(taskA.Id)
|
|||
|
local templatesTaskB = XDataCenter.TaskManager.GetTaskTemplate(taskB.Id)
|
|||
|
if taskA.SortWeight == taskB.SortWeight then
|
|||
|
return templatesTaskA.Priority > templatesTaskB.Priority
|
|||
|
end
|
|||
|
return taskA.SortWeight > taskB.SortWeight
|
|||
|
end)
|
|||
|
|
|||
|
return sortedTasks
|
|||
|
end
|
|||
|
|
|||
|
--宿舍主界面,任务提示。(可领奖励或未完成的)
|
|||
|
function XTaskManager.GetDormTaskTips()
|
|||
|
local storytasks = XTaskManager.GetDormTaskStoryListData()
|
|||
|
local taskguideids = XDormConfig.GetDormitoryGuideTaskCfg()
|
|||
|
if _G.next(storytasks) then
|
|||
|
for _, data in pairs(storytasks) do
|
|||
|
if data.State == XTaskManager.TaskState.Achieved and taskguideids[data.Id] then
|
|||
|
return data, XTaskManager.TaskType.DormNormal, XTaskManager.TaskState.Achieved
|
|||
|
end
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
if _G.next(storytasks) then
|
|||
|
for _, data in pairs(storytasks) do
|
|||
|
if data.State ~= XTaskManager.TaskState.Achieved and data.State ~= XTaskManager.TaskState.Finish and taskguideids[data.Id] and data.GroupTheme ~= 1 then
|
|||
|
return data, XTaskManager.TaskType.DormNormal, XTaskManager.TaskState.Standby
|
|||
|
end
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
local dailytasks = XTaskManager.GetDormDailyTaskList() or {}
|
|||
|
if _G.next(dailytasks) then
|
|||
|
for _, data in pairs(dailytasks) do
|
|||
|
if data.State == XTaskManager.TaskState.Achieved then
|
|||
|
return data, XTaskManager.TaskType.DormDaily, XTaskManager.TaskState.Achieved
|
|||
|
end
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
if _G.next(dailytasks) then
|
|||
|
for _, data in pairs(dailytasks) do
|
|||
|
if data.State ~= XTaskManager.TaskState.Achieved and data.State ~= XTaskManager.TaskState.Finish then
|
|||
|
return data, XTaskManager.TaskType.DormDaily, XTaskManager.TaskState.Standby
|
|||
|
end
|
|||
|
end
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
-- 获取每周任务刷新时间
|
|||
|
function XTaskManager.GetWeeklyTaskRefreshTime()
|
|||
|
return WeekTaskRefreshDay, WeekTaskEpochTime
|
|||
|
end
|
|||
|
|
|||
|
-- 检查任务是否特定时间刷新(每日/每周)
|
|||
|
function XTaskManager.CheckTaskRefreshable(taskId)
|
|||
|
local config = XTaskManager.GetTaskTemplate(taskId)
|
|||
|
if not config then return false end
|
|||
|
|
|||
|
|
|||
|
local taskType = config.Type
|
|||
|
if taskType == XTaskManager.TaskType.Daily then
|
|||
|
return true
|
|||
|
end
|
|||
|
|
|||
|
if taskType == XTaskManager.TaskType.Weekly then
|
|||
|
return true
|
|||
|
end
|
|||
|
|
|||
|
if taskType == XTaskManager.TaskType.TimeLimit then
|
|||
|
return XTaskConfig.GetTimeLimitWeeklyTasksCheckTable()[taskId]
|
|||
|
end
|
|||
|
|
|||
|
return false
|
|||
|
end
|
|||
|
--============
|
|||
|
--获取兵法蓝图玩法是否有未领取奖励的任务
|
|||
|
--============
|
|||
|
function XTaskManager.GetRpgTowerHaveAchievedTask()
|
|||
|
local haveTask = false
|
|||
|
for _, task in pairs(RpgTowerTaskData) do
|
|||
|
if task.State == XTaskManager.TaskState.Achieved then
|
|||
|
haveTask = true
|
|||
|
break
|
|||
|
end
|
|||
|
end
|
|||
|
return haveTask
|
|||
|
end
|
|||
|
--============
|
|||
|
--获取白色情人节玩法是否有未领取奖励的任务
|
|||
|
--============
|
|||
|
function XTaskManager.GetWhiteValentineHaveAchievedTask()
|
|||
|
local haveTask = false
|
|||
|
for _, task in pairs(WhiteValentineTaskData) do
|
|||
|
if task.State == XTaskManager.TaskState.Achieved then
|
|||
|
haveTask = true
|
|||
|
break
|
|||
|
end
|
|||
|
end
|
|||
|
return haveTask
|
|||
|
end
|
|||
|
--============
|
|||
|
--获取猜拳玩法是否有未领取奖励的任务
|
|||
|
--============
|
|||
|
function XTaskManager.GetFingerGuessingHaveAchievedTask()
|
|||
|
local haveTask = false
|
|||
|
for _, task in pairs(FingerGuessingTaskData) do
|
|||
|
if task.State == XTaskManager.TaskState.Achieved then
|
|||
|
haveTask = true
|
|||
|
break
|
|||
|
end
|
|||
|
end
|
|||
|
return haveTask
|
|||
|
end
|
|||
|
--============
|
|||
|
--获取猜拳玩法已完成任务和任务总数
|
|||
|
--============
|
|||
|
function XTaskManager.GetFingerGuessingTaskNum()
|
|||
|
local total = 0
|
|||
|
local achived = 0
|
|||
|
for _, task in pairs(FingerGuessingTaskData) do
|
|||
|
total = total + 1
|
|||
|
if task.State == XTaskManager.TaskState.Achieved or task.State == XTaskManager.TaskState.Finish then
|
|||
|
achived = achived + 1
|
|||
|
end
|
|||
|
end
|
|||
|
return achived, total
|
|||
|
end
|
|||
|
-- 判断累积消费活动是否有未领取奖励任务
|
|||
|
XTaskManager.ConsumeRewardTaskIds = {[39301] = 39301, [39302] = 39302, [39303] = 39303, [39304] = 39304, [39305] = 39305, [39306] = 39306, [39307] = 39307 } -- 累消任务ID
|
|||
|
function XTaskManager.CheckConsumeTaskHaveReward()
|
|||
|
local haveReward = false
|
|||
|
for _, task in pairs(TimeLimitTaskData) do
|
|||
|
if XTaskManager.ConsumeRewardTaskIds[task.Id] and task.State == XTaskManager.TaskState.Achieved then
|
|||
|
haveReward = true
|
|||
|
break
|
|||
|
end
|
|||
|
end
|
|||
|
return haveReward
|
|||
|
end
|
|||
|
|
|||
|
--回归活动任务相关------------------------------------------------------------------------>>>
|
|||
|
function XTaskManager.GetRegressionTaskRedPointCount()
|
|||
|
return RegressionTaskRedPointCount
|
|||
|
end
|
|||
|
|
|||
|
function XTaskManager.GetRegressionTaskTypeToRedPointCount(type)
|
|||
|
return RegressionTaskTypeToRedPointCountDic[type] or 0
|
|||
|
end
|
|||
|
|
|||
|
--获取链接公告任务开启的时间戳
|
|||
|
function XTaskManager.GetLinkTimeTaskOpenTime(id)
|
|||
|
return LinkTaskTimeDict[id]
|
|||
|
end
|
|||
|
|
|||
|
function XTaskManager.GetRegressionTaskByType(type)
|
|||
|
local activityId = XDataCenter.RegressionManager.GetTaskActivityId()
|
|||
|
if not XTool.IsNumberValid(activityId) then
|
|||
|
return
|
|||
|
end
|
|||
|
local groupId = XRegressionConfigs.GetTaskGroupIdByActivityId(activityId)
|
|||
|
local taskIdList = XRegressionConfigs.GetTaskIdListByIdAndType(groupId, type)
|
|||
|
local taskList
|
|||
|
if taskIdList then
|
|||
|
taskList = {}
|
|||
|
local oneTaskData
|
|||
|
for _, id in ipairs(taskIdList) do
|
|||
|
oneTaskData = RegressionTaskData[id]
|
|||
|
if oneTaskData then
|
|||
|
tableInsert(taskList, oneTaskData)
|
|||
|
end
|
|||
|
end
|
|||
|
return GetTaskList(taskList)
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
-- 对任务数据进行排序
|
|||
|
function XTaskManager.SortTaskList(taskList)
|
|||
|
local taskTemplate = XTaskConfig.GetTaskTemplate()
|
|||
|
tableSort(taskList, function(a, b)
|
|||
|
local pa, pb = taskTemplate[a.Id].Priority, taskTemplate[b.Id].Priority
|
|||
|
local stateA = a.State or TotalTaskData[a.Id].State
|
|||
|
local stateB = b.State or TotalTaskData[b.Id].State
|
|||
|
local compareResult = CompareState(stateA, stateB)
|
|||
|
if compareResult == 0 then
|
|||
|
if pa ~= pb then
|
|||
|
return pa > pb
|
|||
|
else
|
|||
|
return a.Id > b.Id
|
|||
|
end
|
|||
|
else
|
|||
|
return compareResult > 0
|
|||
|
end
|
|||
|
end)
|
|||
|
end
|
|||
|
--获取协同合作任务列表,包括已经完成的任务
|
|||
|
function XTaskManager.GetBossOnlineTaskListData()
|
|||
|
local task = {}
|
|||
|
|
|||
|
for _, v in pairs(BossOnlineTaskData) do
|
|||
|
tableInsert(task, v)
|
|||
|
end
|
|||
|
|
|||
|
return task
|
|||
|
end
|
|||
|
XTaskManager.Init()
|
|||
|
return XTaskManager
|
|||
|
end
|
|||
|
|
|||
|
|
|||
|
XRpc.NotifyTask = function(data)
|
|||
|
XDataCenter.TaskManager.SyncTasks(data)
|
|||
|
end
|
|||
|
|
|||
|
XRpc.NotifyTaskData = function(data)
|
|||
|
XDataCenter.TaskManager.InitTaskData(data.TaskData)
|
|||
|
end
|