573 lines
No EOL
17 KiB
Lua
573 lines
No EOL
17 KiB
Lua
XBountyTaskManagerCreator = function()
|
|
|
|
local XBountyTaskManager = {}
|
|
XBountyTaskManager.BountyTaskStatus = {
|
|
["Normal"] = 0,
|
|
["DifficultStageWin"] = 1,
|
|
["Complete"] = 2,
|
|
["AcceptReward"] = 3,
|
|
}
|
|
|
|
--最大任务数
|
|
XBountyTaskManager.MAX_BOUNTY_TASK_COUNT = CS.XGame.Config:GetInt("BountyTaskCount")
|
|
--最大刷新次數
|
|
XBountyTaskManager.MAX_BOUNTY_TASK_REFRESH_COUNT = CS.XGame.Config:GetInt("BountyTaskRefreshCount")
|
|
|
|
|
|
--赏金任务数据
|
|
local BountyTaskInfo = nil
|
|
local BountyTaskPreFightData = nil
|
|
local BountyTaskFightData = nil
|
|
--表数据
|
|
local BountyTaskConfig = {}
|
|
local BountyTaskRankConfig = {}
|
|
local BountyTaskRandomEventConfig = {}
|
|
local BountyTaskDifficultStageConfig = {}
|
|
|
|
local FakeBountyTaskOrder = {}
|
|
local SelectIndex = -1;
|
|
local MaxRankLevel = 0
|
|
|
|
local RefreshTime = -1
|
|
|
|
--协议
|
|
local BountyTaskRequest = {
|
|
AcceptBountyTaskRequest = "AcceptBountyTaskRequest",
|
|
AcceptBountyTaskRewardRequest = "AcceptBountyTaskRewardRequest",
|
|
RefreshBountyTaskPoolRequest = "RefreshBountyTaskPoolRequest",
|
|
}
|
|
|
|
function XBountyTaskManager.Init()
|
|
XBountyTaskManager.InitConfig()
|
|
end
|
|
|
|
--初始化表
|
|
function XBountyTaskManager.InitConfig()
|
|
BountyTaskConfig = XBountyTaskConfigs.GetBountyTaskConfig()
|
|
BountyTaskRankConfig = XBountyTaskConfigs.GetBountyTaskRankConfig()
|
|
BountyTaskRandomEventConfig = XBountyTaskConfigs.GetBountyTaskRandomEventConfig()
|
|
BountyTaskDifficultStageConfig = XBountyTaskConfigs.GetBountyTaskDifficultStageConfig()
|
|
|
|
--获取最高等级
|
|
MaxRankLevel = XBountyTaskConfigs.MaxRankLevel
|
|
end
|
|
|
|
--登录下发
|
|
function XBountyTaskManager.InitData(taskInfo)
|
|
BountyTaskInfo = taskInfo
|
|
end
|
|
|
|
---外部接口------------------------------------------------------
|
|
---获取任务数据
|
|
function XBountyTaskManager.GetBountyTaskInfo()
|
|
return BountyTaskInfo
|
|
end
|
|
|
|
--获取等级
|
|
function XBountyTaskManager.GetBountyTaskInfoRankLevel()
|
|
if not BountyTaskInfo then
|
|
return 0
|
|
end
|
|
|
|
return BountyTaskInfo.RankLevel
|
|
end
|
|
|
|
|
|
--获取最大等级
|
|
function XBountyTaskManager.GetMaxBountyTaskInfoRankLevel()
|
|
return MaxRankLevel
|
|
end
|
|
|
|
--获取任务完成数量
|
|
function XBountyTaskManager.GetBountyTaskCompletedCount()
|
|
if not BountyTaskInfo then
|
|
return 0
|
|
end
|
|
|
|
local taskCount = #BountyTaskInfo.TaskCards
|
|
|
|
local completeCount = 0
|
|
|
|
for index = 1, taskCount do
|
|
if BountyTaskInfo.TaskCards[index].Status == XBountyTaskManager.BountyTaskStatus.Complete or
|
|
BountyTaskInfo.TaskCards[index].Status == XBountyTaskManager.BountyTaskStatus.AcceptReward then
|
|
completeCount = completeCount + 1
|
|
end
|
|
end
|
|
|
|
return completeCount
|
|
end
|
|
|
|
|
|
--是否有可以领奖的任务
|
|
function XBountyTaskManager.CheckBountyTaskCanReward()
|
|
if not BountyTaskInfo then
|
|
return false
|
|
end
|
|
|
|
local taskCount = #BountyTaskInfo.TaskCards
|
|
|
|
for index = 1, taskCount do
|
|
if BountyTaskInfo.TaskCards[index].Status == XBountyTaskManager.BountyTaskStatus.Complete then
|
|
return true
|
|
end
|
|
end
|
|
|
|
return false
|
|
end
|
|
|
|
--获取任务完成并且领奖的数量
|
|
function XBountyTaskManager.GetBountyTaskCompletedAndAcceptRewardCount()
|
|
if not BountyTaskInfo then
|
|
return 0
|
|
end
|
|
|
|
local taskCount = #BountyTaskInfo.TaskCards
|
|
|
|
local completeCount = 0
|
|
|
|
for index = 1, taskCount do
|
|
if BountyTaskInfo.TaskCards[index].Status == XBountyTaskManager.BountyTaskStatus.AcceptReward then
|
|
completeCount = completeCount + 1
|
|
end
|
|
end
|
|
|
|
return completeCount
|
|
end
|
|
|
|
--获取排行奖励表格
|
|
function XBountyTaskManager.GetBountyTaskRankTable()
|
|
if not BountyTaskRankConfig then
|
|
return nil
|
|
end
|
|
|
|
local config = {}
|
|
for _, value in pairs(BountyTaskRankConfig) do
|
|
table.insert(config, value)
|
|
end
|
|
|
|
table.sort(config, function(a, b)
|
|
return b.RankLevel < a.RankLevel
|
|
end)
|
|
|
|
return config
|
|
end
|
|
|
|
--获取本地数据
|
|
function XBountyTaskManager.GetBountyTaskConfig(id)
|
|
if not BountyTaskConfig then
|
|
return
|
|
end
|
|
|
|
if not BountyTaskConfig[id] then
|
|
local tempStr = XBountyTaskConfigs.GetBountyTaskPath()
|
|
XLog.ErrorTableDataNotFound("XBountyTaskManager.GetBountyTaskConfig", "LevelUpTemplates", tempStr, "id", tostring(id))
|
|
return
|
|
end
|
|
|
|
return BountyTaskConfig[id]
|
|
end
|
|
|
|
--获取随机事件数据
|
|
function XBountyTaskManager.GetBountyTaskRandomEventConfig(eventId)
|
|
if not BountyTaskRandomEventConfig then
|
|
return
|
|
end
|
|
|
|
|
|
if not BountyTaskRandomEventConfig[eventId] then
|
|
XLog:Debug("Get BountyTaskRandomEventConfig err,eventId not exist " .. tostring(eventId))
|
|
return
|
|
end
|
|
|
|
return BountyTaskRandomEventConfig[eventId]
|
|
end
|
|
|
|
|
|
--获取等级数据
|
|
function XBountyTaskManager.GetBountyTaskRankConfig(rankLevel)
|
|
if not BountyTaskRankConfig then
|
|
return
|
|
end
|
|
|
|
|
|
if not BountyTaskRankConfig[rankLevel] then
|
|
XLog:Debug("Get BountyTaskRankConfig err,rankLevel not exist " .. tostring(rankLevel))
|
|
return
|
|
end
|
|
|
|
|
|
return BountyTaskRankConfig[rankLevel]
|
|
end
|
|
|
|
|
|
--获取困难关卡数据
|
|
function XBountyTaskManager.GetBountyTaskDifficultStageConfig(id)
|
|
if not BountyTaskDifficultStageConfig then
|
|
return
|
|
end
|
|
|
|
if not BountyTaskDifficultStageConfig[id] then
|
|
XLog:Debug("Get BountyTaskDifficultStageConfig err,Id not exist " .. tostring(id))
|
|
return
|
|
end
|
|
|
|
return BountyTaskDifficultStageConfig[id]
|
|
end
|
|
|
|
--设置选中索引
|
|
function XBountyTaskManager.SetSelectIndex(index)
|
|
SelectIndex = index
|
|
end
|
|
|
|
--获取选中索引
|
|
function XBountyTaskManager.GetSelectIndex()
|
|
return SelectIndex
|
|
end
|
|
|
|
--获取一个假的任务顺序
|
|
function XBountyTaskManager.GetFakeTaskOrder()
|
|
return FakeBountyTaskOrder
|
|
end
|
|
|
|
--是否是赏金任务完成
|
|
function XBountyTaskManager.CheckBountyTaskHasReward()
|
|
if not BountyTaskInfo or not BountyTaskInfo.TaskCards then
|
|
return false
|
|
end
|
|
|
|
for _, task in ipairs(BountyTaskInfo.TaskCards) do
|
|
if task.Status == XBountyTaskManager.BountyTaskStatus.Complete then
|
|
return true
|
|
end
|
|
end
|
|
|
|
return false
|
|
end
|
|
|
|
--是否本周第一次进入赏金
|
|
function XBountyTaskManager.IsFirstTimeLoginInWeek()
|
|
local lastRefreshTime = XBountyTaskManager.GetBountyTaskLastRefreshTime()
|
|
local refreshTime = XBountyTaskManager.GetRefreshTime()
|
|
|
|
if lastRefreshTime ~= refreshTime then
|
|
return true
|
|
end
|
|
|
|
return false
|
|
end
|
|
|
|
|
|
|
|
--是否是赏金前置困难副本
|
|
function XBountyTaskManager.CheckBountyTaskPreFight(stageId)
|
|
if not BountyTaskInfo or not BountyTaskInfo.TaskCards then
|
|
return false
|
|
end
|
|
|
|
for _, var in ipairs(BountyTaskInfo.TaskCards) do
|
|
if var.DifficultStageId == stageId then
|
|
return true, var
|
|
end
|
|
end
|
|
|
|
return false
|
|
end
|
|
|
|
--是否是赏金前置困难副本,判断状态
|
|
function XBountyTaskManager.CheckBountyTaskPreFightWithStatus(stageId)
|
|
local isPreFight, task = XBountyTaskManager.CheckBountyTaskPreFight(stageId)
|
|
if task and (task.Status == XBountyTaskManager.BountyTaskStatus.Complete
|
|
or task.Status == XBountyTaskManager.BountyTaskStatus.AcceptReward) then
|
|
return false
|
|
end
|
|
return isPreFight, task
|
|
end
|
|
|
|
--是否是前置关卡
|
|
function XBountyTaskManager.IsBountyPreFight()
|
|
return BountyTaskPreFightData ~= nil
|
|
end
|
|
|
|
--是否是赏金关卡
|
|
function XBountyTaskManager.IsBountyTaskFight()
|
|
return BountyTaskFightData ~= nil
|
|
end
|
|
|
|
--获取赏金关卡数据
|
|
function XBountyTaskManager.GetBountyTaskFightData()
|
|
return BountyTaskFightData
|
|
end
|
|
|
|
--获取赏金刷新时间
|
|
function XBountyTaskManager.GetRefreshTime()
|
|
return RefreshTime
|
|
end
|
|
|
|
--设置上次进入赏金的时间
|
|
function XBountyTaskManager.SetBountyTaskLastLoginTime()
|
|
local key = tostring(XPlayer.Id) .. "_LastBountyTaskTime"
|
|
CS.UnityEngine.PlayerPrefs.SetInt(key, XTime.GetServerNowTimestamp())
|
|
end
|
|
|
|
--获取上次进入赏金的时间
|
|
function XBountyTaskManager.GetBountyTaskLastLoginTime()
|
|
local key = tostring(XPlayer.Id) .. "_LastBountyTaskTime"
|
|
local lastLoginTime = CS.UnityEngine.PlayerPrefs.GetInt(key, -1)
|
|
return lastLoginTime
|
|
end
|
|
|
|
|
|
--设置上次刷新赏金的时间
|
|
function XBountyTaskManager.SetBountyTaskLastRefreshTime()
|
|
local lastRefreshTime = XBountyTaskManager.GetBountyTaskLastRefreshTime()
|
|
|
|
if lastRefreshTime == RefreshTime then
|
|
return
|
|
end
|
|
|
|
local key = tostring(XPlayer.Id) .. "_BountyTaskLastRefreshTime"
|
|
CS.UnityEngine.PlayerPrefs.SetInt(key, RefreshTime)
|
|
|
|
|
|
XEventManager.DispatchEvent(XEventId.EVENT_BOUNTYTASK_INFO_CHANGE_NOTIFY)
|
|
|
|
end
|
|
|
|
--获取上次刷新赏金的时间
|
|
function XBountyTaskManager.GetBountyTaskLastRefreshTime()
|
|
local key = tostring(XPlayer.Id) .. "_BountyTaskLastRefreshTime"
|
|
local lastLoginTime = CS.UnityEngine.PlayerPrefs.GetInt(key, -1)
|
|
return lastLoginTime
|
|
end
|
|
|
|
--记录前置关卡战斗
|
|
function XBountyTaskManager.RecordPreFightData(taskId, teamId, isHasAssist, assisPId, assistType)
|
|
local bountyTask = XBountyTaskManager.GetBountyTaskConfig(taskId)
|
|
if not bountyTask then
|
|
return
|
|
end
|
|
|
|
BountyTaskPreFightData = {}
|
|
BountyTaskPreFightData.taskId = taskId
|
|
BountyTaskPreFightData.stageId = bountyTask.StageId
|
|
BountyTaskPreFightData.teamId = teamId
|
|
BountyTaskPreFightData.isHasAssist = isHasAssist
|
|
BountyTaskPreFightData.assisPId = assisPId
|
|
BountyTaskPreFightData.assistType = assistType
|
|
end
|
|
|
|
--进入战斗
|
|
function XBountyTaskManager.EnterFight(result)
|
|
if not BountyTaskPreFightData then
|
|
return
|
|
end
|
|
|
|
local stage = XDataCenter.FubenManager.GetStageCfg(BountyTaskPreFightData.stageId)
|
|
XDataCenter.FubenManager.EnterFight(stage, BountyTaskPreFightData.teamId)
|
|
BountyTaskPreFightData = nil
|
|
BountyTaskFightData = {}
|
|
BountyTaskFightData.PreFightResult = result
|
|
end
|
|
|
|
--重置战斗数据
|
|
function XBountyTaskManager.ResetFightData()
|
|
BountyTaskFightData = nil
|
|
BountyTaskPreFightData = nil
|
|
end
|
|
--------------------------------------------------------------
|
|
--从池中抽取任务
|
|
function XBountyTaskManager.GetTaskCardFromTaskPool(taskId)
|
|
if not BountyTaskInfo or not BountyTaskInfo.TaskPool then
|
|
return
|
|
end
|
|
|
|
local index = -1
|
|
local taskCard = nil
|
|
for i, var in ipairs(BountyTaskInfo.TaskPool) do
|
|
if var.Id == taskId then
|
|
taskCard = var
|
|
index = i
|
|
break
|
|
end
|
|
end
|
|
|
|
if index == -1 or taskCard == nil then
|
|
return
|
|
end
|
|
|
|
return taskCard
|
|
end
|
|
|
|
--完成任务
|
|
function XBountyTaskManager.FinshedTask(taskId)
|
|
if not BountyTaskInfo then
|
|
return
|
|
end
|
|
|
|
for _, var in ipairs(BountyTaskInfo.TaskCards) do
|
|
if var.Id == taskId then
|
|
var.Status = XBountyTaskManager.BountyTaskStatus.Complete
|
|
break
|
|
end
|
|
end
|
|
end
|
|
|
|
|
|
--领取奖励
|
|
function XBountyTaskManager.GetBountyTaskReward(resp)
|
|
if not BountyTaskInfo then
|
|
return
|
|
end
|
|
|
|
local taskId = resp.TaskId
|
|
|
|
for _, var in ipairs(BountyTaskInfo.TaskCards) do
|
|
if var.Id == taskId then
|
|
var.Status = XBountyTaskManager.BountyTaskStatus.AcceptReward
|
|
break
|
|
end
|
|
end
|
|
|
|
if BountyTaskInfo.RankLevel < resp.RankLevel then
|
|
BountyTaskInfo.RankLevel = resp.RankLevel
|
|
end
|
|
|
|
--升级
|
|
XUiManager.OpenUiObtain(resp.RewardGoodsList, CS.XTextManager.GetText("BountyTaskRewardTipTitle"), function()
|
|
XEventManager.DispatchEvent(XEventId.EVENT_BOUNTYTASK_ACCEPT_TASK_REWARD)
|
|
end)
|
|
end
|
|
|
|
----协议----------------------------------------------------------------------
|
|
--请求接受任务
|
|
function XBountyTaskManager.AcceptBountyTask(taskId, cb)
|
|
XNetwork.Call(BountyTaskRequest.AcceptBountyTaskRequest, { TaskId = taskId }, function(resp)
|
|
if resp.Code ~= XCode.Success then
|
|
XUiManager.TipCode(resp.Code)
|
|
return
|
|
end
|
|
|
|
if not BountyTaskInfo then
|
|
return
|
|
end
|
|
|
|
if SelectIndex > 0 then
|
|
FakeBountyTaskOrder[taskId] = SelectIndex;
|
|
end
|
|
|
|
local taskCard = XBountyTaskManager.GetTaskCardFromTaskPool(taskId)
|
|
if taskCard then
|
|
table.insert(BountyTaskInfo.TaskCards, taskCard)
|
|
end
|
|
|
|
BountyTaskInfo.TaskPool = resp.TaskPool
|
|
-- XUiManager.TipMsg(CS.XTextManager.GetText("BountyTaskAccetpTaskSuccess"))
|
|
if cb then
|
|
cb()
|
|
end
|
|
|
|
XEventManager.DispatchEvent(XEventId.EVENT_BOUNTYTASK_ACCEPT_TASK)
|
|
end)
|
|
end
|
|
|
|
--请求领取奖励
|
|
function XBountyTaskManager.AcceptBountyTaskReward(taskId, cb)
|
|
XNetwork.Call(BountyTaskRequest.AcceptBountyTaskRewardRequest, { TaskId = taskId }, function(resp)
|
|
if resp.Code ~= XCode.Success then
|
|
XUiManager.TipCode(resp.Code)
|
|
return
|
|
end
|
|
|
|
if not BountyTaskInfo then
|
|
return
|
|
end
|
|
|
|
XBountyTaskManager.GetBountyTaskReward(resp)
|
|
|
|
if cb then
|
|
cb()
|
|
end
|
|
|
|
end)
|
|
end
|
|
|
|
--刷新任务池
|
|
function XBountyTaskManager.RefreshBountyTaskPool(cb)
|
|
XNetwork.Call(BountyTaskRequest.RefreshBountyTaskPoolRequest, nil, function(resp)
|
|
if resp.Code ~= XCode.Success then
|
|
XUiManager.TipCode(resp.Code)
|
|
return
|
|
end
|
|
|
|
if not BountyTaskInfo then
|
|
return
|
|
end
|
|
|
|
BountyTaskInfo.TaskPoolRefreshCount = resp.TaskPoolRefreshCount
|
|
BountyTaskInfo.TaskPool = resp.TaskPool
|
|
|
|
if cb then
|
|
cb()
|
|
end
|
|
|
|
XEventManager.DispatchEvent(XEventId.EVENT_BOUNTYTASK_TASK_REFRESH)
|
|
end)
|
|
end
|
|
|
|
--通知任务信息改变
|
|
function XBountyTaskManager.NotifyBountyTaskInfo(data)
|
|
BountyTaskInfo = data.TaskInfo
|
|
RefreshTime = data.RefreshTime
|
|
FakeBountyTaskOrder = {}
|
|
SelectIndex = -1
|
|
XEventManager.DispatchEvent(XEventId.EVENT_BOUNTYTASK_INFO_CHANGE_NOTIFY)
|
|
end
|
|
|
|
--推送任务完成
|
|
function XBountyTaskManager.NotifyBountyTaskComplete(data)
|
|
XBountyTaskManager.FinshedTask(data.TaskId)
|
|
XEventManager.DispatchEvent(XEventId.EVENT_BOUNTYTASK_TASK_COMPLETE_NOTIFY)
|
|
end
|
|
--------------------------------------------------------------------------
|
|
function XBountyTaskManager.CheckReadyToFight()
|
|
return not XBountyTaskManager.IsBountyTaskFight()
|
|
end
|
|
|
|
function XBountyTaskManager.FinishFight()
|
|
local preSettle = XBountyTaskManager.GetBountyTaskFightData().PreFightResult
|
|
XDataCenter.FubenManager.ChallengeWin(preSettle)
|
|
XBountyTaskManager.ResetFightData()
|
|
end
|
|
|
|
--打开加载界面
|
|
function XBountyTaskManager.OpenFightLoading(stageId)
|
|
XLuaUiManager.Remove("UiMoneyRewardFightTipFind")
|
|
|
|
XLuaUiManager.Open("UiMoneyRewardFightTips", stageId)
|
|
end
|
|
|
|
function XBountyTaskManager.CloseFightLoading()
|
|
XLuaUiManager.Remove("UiMoneyRewardFightTips")
|
|
end
|
|
|
|
--初始化关卡数据
|
|
function XBountyTaskManager.InitStageInfo()
|
|
for id, v in pairs(BountyTaskConfig) do
|
|
local stageInfo = XDataCenter.FubenManager.GetStageInfo(v.StageId)
|
|
stageInfo.BountyId = id
|
|
stageInfo.Type = XDataCenter.FubenManager.StageType.BountyTask
|
|
end
|
|
end
|
|
|
|
XBountyTaskManager.Init()
|
|
return XBountyTaskManager
|
|
end
|
|
|
|
XRpc.NotifyBountyTaskInfo = function(data)
|
|
XDataCenter.BountyTaskManager.NotifyBountyTaskInfo(data)
|
|
end
|
|
|
|
XRpc.NotifyBountyTaskComplete = function(data)
|
|
XDataCenter.BountyTaskManager.NotifyBountyTaskComplete(data)
|
|
end |