PGRData/Script/matrix/xmanager/XBountyTaskManager.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