917 lines
28 KiB
Lua
917 lines
28 KiB
Lua
|
XTaskForceManagerCreator = function()
|
|||
|
--派遣
|
|||
|
local XTaskForceManager = {}
|
|||
|
|
|||
|
--派遣任务状态
|
|||
|
XTaskForceManager.TaskForceTaskStatus = {
|
|||
|
Normal = 0,
|
|||
|
Accept = 1,
|
|||
|
Complete = 2,
|
|||
|
}
|
|||
|
|
|||
|
local TaskForceConfig = {}
|
|||
|
local TaskForceExpendConfig = {}
|
|||
|
local TaskForceSectionConfig = {}
|
|||
|
local TaskForceTaskPoolConfig = {}
|
|||
|
local TaskForceCountConfig = {}
|
|||
|
|
|||
|
local MaxRefreshTimes = 0 --最大刷新次数,可以超过
|
|||
|
local TotalFreeRefreshTimes = 0 -- 总的免费次数
|
|||
|
local TotalSectionCount = 0 -- 总的章节数
|
|||
|
|
|||
|
|
|||
|
local TaskForceInfo = {} --所有派遣信息
|
|||
|
local NextRefreshTime = -1
|
|||
|
|
|||
|
local XTaskForceRequest = {
|
|||
|
TaskForceRefreshRequest = "TaskForceRefreshRequest",
|
|||
|
AcceptTaskForceTaskRequest = "AcceptTaskForceTaskRequest",
|
|||
|
GiveUpTaskForceTaskRequest = "GiveUpTaskForceTaskRequest",
|
|||
|
TaskForceTaskFinishRequest = "TaskForceTaskFinishRequest",
|
|||
|
AcceptTaskForceRewardRequest = "AcceptTaskForceRewardRequest",
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
--初始化
|
|||
|
function XTaskForceManager.Init()
|
|||
|
XTaskForceManager.InitConfig()
|
|||
|
end
|
|||
|
|
|||
|
|
|||
|
--初始化表
|
|||
|
function XTaskForceManager.InitConfig()
|
|||
|
TaskForceConfig = XTaskForceConfigs.GetTaskForceConfig()
|
|||
|
TaskForceExpendConfig = XTaskForceConfigs.GetTaskForceExpendConfig()
|
|||
|
TaskForceSectionConfig = XTaskForceConfigs.GetTaskForceSectionConfig()
|
|||
|
TaskForceTaskPoolConfig = XTaskForceConfigs.GetTaskForceTaskPoolConfig()
|
|||
|
TaskForceCountConfig = XTaskForceConfigs.GetTaskForceCountConfig()
|
|||
|
|
|||
|
MaxRefreshTimes = XTaskForceConfigs.MaxRefreshTimes
|
|||
|
TotalFreeRefreshTimes = XTaskForceConfigs.TotalFreeRefreshTimes
|
|||
|
TotalSectionCount = XTaskForceConfigs.TotalSectionCount
|
|||
|
end
|
|||
|
|
|||
|
--获取章节表
|
|||
|
function XTaskForceManager.GetTaskForceSectionConfig()
|
|||
|
return TaskForceSectionConfig
|
|||
|
end
|
|||
|
|
|||
|
--获取当前章节Id
|
|||
|
function XTaskForceManager.GetCurTaskForceSectionId()
|
|||
|
if not TaskForceInfo then
|
|||
|
return -1
|
|||
|
end
|
|||
|
|
|||
|
return TaskForceInfo.SectionId
|
|||
|
end
|
|||
|
|
|||
|
--获取派遣上限相关
|
|||
|
function XTaskForceManager.GetTaskForceConfigById(id)
|
|||
|
if not TaskForceConfig then
|
|||
|
XLog.ErrorTableDataNotFound("XTaskForceManager.GetTaskForceConfigById",
|
|||
|
"TaskForceConfig", "Share/TaskForce/TaskForceConfig.tab", "id", tostring(id))
|
|||
|
return
|
|||
|
end
|
|||
|
|
|||
|
return TaskForceConfig[id]
|
|||
|
end
|
|||
|
|
|||
|
---获取总章节数
|
|||
|
function XTaskForceManager.GetTotalTaskForeSectionCount()
|
|||
|
return TotalSectionCount
|
|||
|
end
|
|||
|
|
|||
|
--获取章节
|
|||
|
function XTaskForceManager.GetTaskForceSectionConfigById(id)
|
|||
|
if not TaskForceSectionConfig then
|
|||
|
XLog.ErrorTableDataNotFound("XTaskForceManager.GetTaskForceSectionConfigById",
|
|||
|
"TaskForceSectionConfig", "Share/TaskForce/TaskForceSection.tab", "id", tostring(id))
|
|||
|
return
|
|||
|
end
|
|||
|
|
|||
|
return TaskForceSectionConfig[id]
|
|||
|
end
|
|||
|
|
|||
|
---获取派遣最大次数条件数据
|
|||
|
function XTaskForceManager.GetTaskForceConfigInfo()
|
|||
|
return TaskForceConfig
|
|||
|
end
|
|||
|
|
|||
|
---获取派遣数据
|
|||
|
function XTaskForceManager.GetTaskForeInfo()
|
|||
|
return TaskForceInfo
|
|||
|
end
|
|||
|
|
|||
|
--获取下次更新时间
|
|||
|
function XTaskForceManager.GetNextRefreshTime()
|
|||
|
return NextRefreshTime
|
|||
|
end
|
|||
|
|
|||
|
--获取最近一个要完成的派遣任务
|
|||
|
function XTaskForceManager.GetLatelyTaskForeInfo()
|
|||
|
if not TaskForceInfo then
|
|||
|
return
|
|||
|
end
|
|||
|
|
|||
|
if not TaskForceInfo.TaskList or #TaskForceInfo.TaskList <= 0 then
|
|||
|
return
|
|||
|
end
|
|||
|
|
|||
|
local taskForeInfo = nil
|
|||
|
for _, v in ipairs(TaskForceInfo.TaskList) do
|
|||
|
if v.Status == XTaskForceManager.TaskForceTaskStatus.Accept then
|
|||
|
if taskForeInfo then
|
|||
|
taskForeInfo = taskForeInfo.UtcFinishTime < v.UtcFinishTime and taskForeInfo or v
|
|||
|
else
|
|||
|
taskForeInfo = v
|
|||
|
end
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
return taskForeInfo
|
|||
|
end
|
|||
|
|
|||
|
--获取进行中的任务数量
|
|||
|
function XTaskForceManager.GetWorkingTaskCount()
|
|||
|
if not TaskForceInfo then
|
|||
|
return 0
|
|||
|
end
|
|||
|
|
|||
|
if not TaskForceInfo.TaskList then
|
|||
|
return 0
|
|||
|
end
|
|||
|
|
|||
|
local taskCount = 0
|
|||
|
for _, v in ipairs(TaskForceInfo.TaskList) do
|
|||
|
if v.Status ~= XTaskForceManager.TaskForceTaskStatus.Normal then
|
|||
|
taskCount = taskCount + 1
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
return taskCount
|
|||
|
end
|
|||
|
|
|||
|
|
|||
|
--获取任务池数据
|
|||
|
function XTaskForceManager.GetTaskPoolInfo()
|
|||
|
|
|||
|
if not TaskForceTaskPoolConfig then
|
|||
|
return
|
|||
|
end
|
|||
|
|
|||
|
if not TaskForceInfo then
|
|||
|
return
|
|||
|
end
|
|||
|
|
|||
|
local tasks = {}
|
|||
|
|
|||
|
for _, v in ipairs(TaskForceInfo.TaskList) do
|
|||
|
local task = {}
|
|||
|
task.TaskCfg = TaskForceTaskPoolConfig[v.TaskId]
|
|||
|
task.Task = v
|
|||
|
task.IsWorking = v.Status ~= XTaskForceManager.TaskForceTaskStatus.Normal
|
|||
|
table.insert(tasks, task)
|
|||
|
end
|
|||
|
|
|||
|
table.sort(tasks, function(a, b)
|
|||
|
return tonumber(a.Task.Status) > tonumber(b.Task.Status)
|
|||
|
end)
|
|||
|
|
|||
|
return tasks
|
|||
|
end
|
|||
|
|
|||
|
--获取免费刷新总次数
|
|||
|
function XTaskForceManager.GetTotalFreeRefreshTimes()
|
|||
|
return TotalFreeRefreshTimes
|
|||
|
end
|
|||
|
|
|||
|
--获取刷新信息
|
|||
|
function XTaskForceManager.GetRefreshInfoByTimes(times)
|
|||
|
if not TaskForceExpendConfig then
|
|||
|
return
|
|||
|
end
|
|||
|
|
|||
|
if times <= MaxRefreshTimes then
|
|||
|
return TaskForceExpendConfig[times]
|
|||
|
end
|
|||
|
|
|||
|
return TaskForceExpendConfig[MaxRefreshTimes]
|
|||
|
end
|
|||
|
|
|||
|
--刷新任务池
|
|||
|
function XTaskForceManager.CheckCanRefresh(id, count)
|
|||
|
if count < 0 then
|
|||
|
return false
|
|||
|
end
|
|||
|
|
|||
|
local enough = XDataCenter.ItemManager.CheckItemCountById(id, count)
|
|||
|
if not enough then
|
|||
|
local itemName = XDataCenter.ItemManager.GetItemName(id)
|
|||
|
local text = CS.XTextManager.GetText('AssetsBuyConsumeNotEnough', itemName)
|
|||
|
XUiManager.TipMsg(text, XUiManager.UiTipType.Tip)
|
|||
|
return false
|
|||
|
end
|
|||
|
|
|||
|
return true
|
|||
|
end
|
|||
|
|
|||
|
--檢查隊伍條件
|
|||
|
function XTaskForceManager.CheckTeamCondition(taskId, characterIds)
|
|||
|
if #characterIds <= 0 then
|
|||
|
return false, CS.XTextManager.GetText("MissionConditionMemberLimit")
|
|||
|
end
|
|||
|
|
|||
|
|
|||
|
if not TaskForceTaskPoolConfig then
|
|||
|
return false
|
|||
|
end
|
|||
|
|
|||
|
local taskCfg = TaskForceTaskPoolConfig[taskId]
|
|||
|
if not taskCfg then
|
|||
|
return false
|
|||
|
end
|
|||
|
|
|||
|
local requireMemberCount = taskCfg.MemberCount
|
|||
|
if #characterIds < requireMemberCount then
|
|||
|
return false, CS.XTextManager.GetText("MissionConditionMemberLimit")
|
|||
|
end
|
|||
|
--[[ local characterLevelLimit = taskCfg.CharacterLevelLimit
|
|||
|
for i, id in ipairs(characterIds) do
|
|||
|
local character = XDataCenter.CharacterManager.GetCharacter(id)
|
|||
|
if character.Level < characterLevelLimit then
|
|||
|
return false, CS.XTextManager.GetText("MissionConditionNotEnough")
|
|||
|
end
|
|||
|
end]]
|
|||
|
--
|
|||
|
return true
|
|||
|
end
|
|||
|
|
|||
|
local DefaultSort = function(a, b)
|
|||
|
|
|||
|
if a.IsWorking ~= b.IsWorking then
|
|||
|
return a.IsWorking < b.IsWorking
|
|||
|
end
|
|||
|
|
|||
|
if a.Level ~= b.Level then
|
|||
|
return a.Level > b.Level
|
|||
|
end
|
|||
|
|
|||
|
if a.Quality ~= b.Quality then
|
|||
|
return a.Quality > b.Quality
|
|||
|
end
|
|||
|
|
|||
|
local priorityA = XCharacterConfigs.GetCharacterPriority(a.Id)
|
|||
|
local priorityB = XCharacterConfigs.GetCharacterPriority(b.Id)
|
|||
|
|
|||
|
if priorityA ~= priorityB then
|
|||
|
return priorityA < priorityB
|
|||
|
end
|
|||
|
|
|||
|
return a.Id > b.Id
|
|||
|
end
|
|||
|
|
|||
|
--获取可选择的角色
|
|||
|
function XTaskForceManager.GetOwnCharacterList()
|
|||
|
local characterList = XDataCenter.CharacterManager.GetOwnCharacterList()
|
|||
|
if not characterList then
|
|||
|
return
|
|||
|
end
|
|||
|
|
|||
|
if not TaskForceInfo or not TaskForceInfo.TaskList or #TaskForceInfo.TaskList == 0 then
|
|||
|
return characterList
|
|||
|
end
|
|||
|
|
|||
|
|
|||
|
local workingId = {}
|
|||
|
for _, v in ipairs(TaskForceInfo.TaskList) do
|
|||
|
if v.Status ~= XTaskForceManager.TaskForceTaskStatus.Normal then
|
|||
|
local members = v.Members
|
|||
|
for _, id in ipairs(members) do
|
|||
|
workingId[id] = true
|
|||
|
end
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
for _, v in ipairs(characterList) do
|
|||
|
if workingId[v.Id] then
|
|||
|
v.IsWorking = 1
|
|||
|
else
|
|||
|
v.IsWorking = 0
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
table.sort(characterList, DefaultSort)
|
|||
|
|
|||
|
return characterList
|
|||
|
end
|
|||
|
|
|||
|
|
|||
|
--获取可选择的角色
|
|||
|
function XTaskForceManager.GetOwnCharacterCanTeamList()
|
|||
|
local characterList = XDataCenter.CharacterManager.GetOwnCharacterList()
|
|||
|
if not characterList then
|
|||
|
return
|
|||
|
end
|
|||
|
|
|||
|
if not TaskForceInfo or not TaskForceInfo.TaskList or #TaskForceInfo.TaskList == 0 then
|
|||
|
return characterList
|
|||
|
end
|
|||
|
|
|||
|
local workingId = {}
|
|||
|
for _, v in ipairs(TaskForceInfo.TaskList) do
|
|||
|
if v.Status ~= XTaskForceManager.TaskForceTaskStatus.Normal then
|
|||
|
local members = v.Members
|
|||
|
for _, id in ipairs(members) do
|
|||
|
workingId[id] = true
|
|||
|
end
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
local list = {}
|
|||
|
for _, v in ipairs(characterList) do
|
|||
|
if not workingId[v.Id] then
|
|||
|
table.insert(list, v.Id)
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
return list
|
|||
|
end
|
|||
|
|
|||
|
--一键选择
|
|||
|
function XTaskForceManager.AutoChoiceCharacter(taskId)
|
|||
|
local emptyTable = {}
|
|||
|
if not TaskForceTaskPoolConfig then
|
|||
|
return emptyTable
|
|||
|
end
|
|||
|
|
|||
|
local taskCfg = TaskForceTaskPoolConfig[taskId]
|
|||
|
if not taskCfg then
|
|||
|
return emptyTable
|
|||
|
end
|
|||
|
|
|||
|
local requireMemberCount = taskCfg.MemberCount
|
|||
|
|
|||
|
local charIds = XTaskForceManager.GetOwnCharacterCanTeamList()
|
|||
|
|
|||
|
if not charIds or #charIds <= 0 then
|
|||
|
return emptyTable
|
|||
|
end
|
|||
|
|
|||
|
--条件筛选
|
|||
|
local conditions = {}
|
|||
|
local conditionIds = taskCfg.ConditionList
|
|||
|
for _, id in ipairs(conditionIds) do
|
|||
|
local conditionRequireMember = XTaskForceManager.GetConditionRequireMember(id)
|
|||
|
if conditionRequireMember == requireMemberCount then
|
|||
|
charIds = XTaskForceManager.FitterPriorityCondition(charIds, id)
|
|||
|
else
|
|||
|
local condition = {}
|
|||
|
condition.Id = id
|
|||
|
condition.Members = {}
|
|||
|
condition.MemberIndexs = {}
|
|||
|
condition.ConditionRequireMember = conditionRequireMember
|
|||
|
table.insert(conditions, condition)
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
if not charIds or #charIds < requireMemberCount then
|
|||
|
return emptyTable
|
|||
|
end
|
|||
|
|
|||
|
--如果没有需要匹配的条件
|
|||
|
if not conditions or #conditions <= 0 then
|
|||
|
local newCharIds = {}
|
|||
|
for _ = 1, requireMemberCount, 1 do
|
|||
|
local rand = math.random(1, #charIds)
|
|||
|
table.insert(newCharIds, charIds[rand])
|
|||
|
table.remove(charIds, rand)
|
|||
|
end
|
|||
|
return newCharIds
|
|||
|
end
|
|||
|
|
|||
|
--乱序
|
|||
|
charIds = XTool.RandomBreakTableOrder(charIds)
|
|||
|
|
|||
|
--获得多个条件集合
|
|||
|
for index = 1, #conditions, 1 do
|
|||
|
local condition = conditions[index]
|
|||
|
for _, id in ipairs(charIds) do
|
|||
|
if XTaskForceManager.CheckCondition(condition.Id, id) then
|
|||
|
condition.Members[id] = id
|
|||
|
table.insert(condition.MemberIndexs, id)
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
--某一个条件不满足
|
|||
|
if #condition.MemberIndexs < condition.ConditionRequireMember then
|
|||
|
return emptyTable
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
local ret, tmpCharIds = XTaskForceManager.RandomMultContionCalculate(charIds, requireMemberCount, conditions)
|
|||
|
|
|||
|
if not ret then
|
|||
|
return emptyTable
|
|||
|
end
|
|||
|
|
|||
|
return tmpCharIds
|
|||
|
end
|
|||
|
|
|||
|
--多条件随机算法
|
|||
|
function XTaskForceManager.RandomMultContionCalculate(charIds, requireCount, conditions)
|
|||
|
local charIdMap = {}
|
|||
|
local count = 0
|
|||
|
local ret
|
|||
|
|
|||
|
ret, charIdMap, count = XTaskForceManager.RecursionCalculate(charIdMap, requireCount, conditions, count, 1)
|
|||
|
if not ret then
|
|||
|
return false
|
|||
|
end
|
|||
|
|
|||
|
--提前满足条件,随机补充
|
|||
|
while count < requireCount do
|
|||
|
local rand = math.random(1, #charIds)
|
|||
|
local id = charIds[rand]
|
|||
|
if not charIdMap[id] then
|
|||
|
charIdMap[id] = id
|
|||
|
count = count + 1
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
local Ids = {}
|
|||
|
for k, _ in pairs(charIdMap) do
|
|||
|
table.insert(Ids, k)
|
|||
|
end
|
|||
|
|
|||
|
return true, Ids
|
|||
|
end
|
|||
|
|
|||
|
--递归检查条件
|
|||
|
function XTaskForceManager.RecursionCalculate(charIds, requireCount, conditions, count, index)
|
|||
|
|
|||
|
--超出条件上限
|
|||
|
if index > #conditions then
|
|||
|
return false
|
|||
|
end
|
|||
|
|
|||
|
local curCondition = conditions[index]
|
|||
|
|
|||
|
for randIndex = 1, #curCondition.MemberIndexs do
|
|||
|
local id = curCondition.MemberIndexs[randIndex]
|
|||
|
if not charIds[id] then
|
|||
|
charIds[id] = id
|
|||
|
--检测是否行得通
|
|||
|
local result, refCount = XTaskForceManager.CheckAllConditionEnough(charIds, conditions, requireCount, count + 1)
|
|||
|
if result == 1 then
|
|||
|
return true, charIds, count + 1
|
|||
|
elseif result == 0 then
|
|||
|
if refCount[index] >= curCondition.ConditionRequireMember then
|
|||
|
return XTaskForceManager.RecursionCalculate(charIds, requireCount, conditions, count + 1, index + 1)
|
|||
|
else
|
|||
|
count = count + 1
|
|||
|
end
|
|||
|
else
|
|||
|
charIds[id] = nil
|
|||
|
end
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
return false
|
|||
|
end
|
|||
|
|
|||
|
--检测
|
|||
|
--返回 1 完成
|
|||
|
--返回 0 继续
|
|||
|
--返回 -1 返回上一步
|
|||
|
function XTaskForceManager.CheckAllConditionEnough(charIds, conditions, requireCount, count)
|
|||
|
|
|||
|
--检测每个条件的满足情况
|
|||
|
local refCount = {}
|
|||
|
local compeltedCount = 0
|
|||
|
for index, condition in ipairs(conditions) do
|
|||
|
refCount[index] = refCount[index] or 0
|
|||
|
for _, v in pairs(charIds) do
|
|||
|
if condition.Members[v] then
|
|||
|
refCount[index] = refCount[index] + 1
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
--当前条件的需求数量大于坑位数
|
|||
|
if refCount[index] >= condition.ConditionRequireMember then
|
|||
|
compeltedCount = compeltedCount + 1
|
|||
|
elseif condition.ConditionRequireMember - refCount[index] > requireCount - count then
|
|||
|
return -1
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
--满足了所有条件
|
|||
|
if compeltedCount == #conditions then
|
|||
|
return 1
|
|||
|
end
|
|||
|
|
|||
|
--没有坑位
|
|||
|
if count == requireCount then
|
|||
|
return -1
|
|||
|
end
|
|||
|
|
|||
|
return 0, refCount
|
|||
|
|
|||
|
end
|
|||
|
|
|||
|
|
|||
|
--过滤全条件不满足的构造体
|
|||
|
function XTaskForceManager.FitterPriorityCondition(charIdList, id)
|
|||
|
if not charIdList or #charIdList <= 0 then
|
|||
|
return
|
|||
|
end
|
|||
|
|
|||
|
local newList = {}
|
|||
|
|
|||
|
for _, charId in ipairs(charIdList) do
|
|||
|
if XTaskForceManager.CheckCondition(id, charId) then
|
|||
|
table.insert(newList, charId)
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
return newList
|
|||
|
end
|
|||
|
|
|||
|
--检测红点
|
|||
|
function XTaskForceManager.CheckTaskForceCompleted()
|
|||
|
|
|||
|
if not TaskForceInfo or not TaskForceInfo.TaskList or #TaskForceInfo.TaskList == 0 then
|
|||
|
return false
|
|||
|
end
|
|||
|
|
|||
|
for _, v in ipairs(TaskForceInfo.TaskList) do
|
|||
|
if v.Status == XTaskForceManager.TaskForceTaskStatus.Complete then
|
|||
|
return true
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
return false
|
|||
|
end
|
|||
|
------------------------------------------------------------
|
|||
|
--完成任务
|
|||
|
function XTaskForceManager.CompletedTaskForceTask(taskId)
|
|||
|
if not TaskForceInfo then
|
|||
|
return
|
|||
|
end
|
|||
|
|
|||
|
if not TaskForceInfo.TaskList or #TaskForceInfo.TaskList <= 0 then
|
|||
|
return
|
|||
|
end
|
|||
|
|
|||
|
for _, var in ipairs(TaskForceInfo.TaskList) do
|
|||
|
if var.TaskId == taskId then
|
|||
|
var.Status = XTaskForceManager.TaskForceTaskStatus.Complete
|
|||
|
break
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
end
|
|||
|
|
|||
|
|
|||
|
--网络协议----------------------------
|
|||
|
--放弃任务
|
|||
|
function XTaskForceManager.GiveUpTaskForceTaskRequest(taskId)
|
|||
|
XNetwork.Call(XTaskForceRequest.GiveUpTaskForceTaskRequest, { TaskId = taskId }, function(resp)
|
|||
|
if resp.Code ~= XCode.Success then
|
|||
|
XUiManager.TipCode(resp.Code)
|
|||
|
return
|
|||
|
end
|
|||
|
|
|||
|
if not TaskForceInfo then
|
|||
|
return
|
|||
|
end
|
|||
|
|
|||
|
if not TaskForceInfo.TaskList or #TaskForceInfo.TaskList <= 0 then
|
|||
|
return
|
|||
|
end
|
|||
|
|
|||
|
-- local removeIndex = -1
|
|||
|
for _, var in ipairs(TaskForceInfo.TaskList) do
|
|||
|
if var.TaskId == resp.TaskId then
|
|||
|
var.Members = {}
|
|||
|
var.Status = XTaskForceManager.TaskForceTaskStatus.Normal
|
|||
|
break
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
-- if removeIndex > 0 then
|
|||
|
-- table.remove(TaskForceInfo.TaskList, removeIndex)
|
|||
|
-- end
|
|||
|
XUiManager.TipMsg(CS.XTextManager.GetText("MissionGiveupSuccess"))
|
|||
|
|
|||
|
|
|||
|
XEventManager.DispatchEvent(XEventId.EVENT_TASKFORCE_GIVEUP_TASK_REQUEST)
|
|||
|
end)
|
|||
|
end
|
|||
|
|
|||
|
--接受任务
|
|||
|
function XTaskForceManager.AcceptTaskForceTaskRequest(taskId, members, callback)
|
|||
|
XNetwork.Call(XTaskForceRequest.AcceptTaskForceTaskRequest, { TaskId = taskId, Members = members }, function(resp)
|
|||
|
if resp.Code ~= XCode.Success then
|
|||
|
XUiManager.TipCode(resp.Code)
|
|||
|
return
|
|||
|
end
|
|||
|
|
|||
|
if not TaskForceInfo then
|
|||
|
return
|
|||
|
end
|
|||
|
|
|||
|
local removeIndex = -1
|
|||
|
for index, v in ipairs(TaskForceInfo.TaskList) do
|
|||
|
if resp.TaskId == v.TaskId then
|
|||
|
removeIndex = index
|
|||
|
--v.Status = XTaskForceManager.TaskForceTaskStatus.Accept
|
|||
|
break
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
|
|||
|
if removeIndex > 0 then
|
|||
|
TaskForceInfo.TaskList[removeIndex] = resp.TaskInfo
|
|||
|
end
|
|||
|
|
|||
|
if callback then
|
|||
|
callback()
|
|||
|
end
|
|||
|
|
|||
|
--XUiManager.TipMsg(CS.XTextManager.GetText("MissionSendSuccess"))
|
|||
|
XEventManager.DispatchEvent(XEventId.EVENT_TASKFORCE_ACCEPT_TASK_REQUEST)
|
|||
|
end)
|
|||
|
end
|
|||
|
|
|||
|
--请求刷新任务池
|
|||
|
function XTaskForceManager.TaskForceRefreshRequest(cb)
|
|||
|
XNetwork.Call(XTaskForceRequest.TaskForceRefreshRequest, nil, function(resp)
|
|||
|
if resp.Code ~= XCode.Success then
|
|||
|
XUiManager.TipCode(resp.Code)
|
|||
|
return
|
|||
|
end
|
|||
|
|
|||
|
if not TaskForceInfo then
|
|||
|
return
|
|||
|
end
|
|||
|
|
|||
|
TaskForceInfo.TaskList = resp.TaskList
|
|||
|
TaskForceInfo.RefreshCount = TaskForceInfo.RefreshCount + 1
|
|||
|
|
|||
|
--XUiManager.TipMsg(CS.XTextManager.GetText("MissionRefreshSuccess"))
|
|||
|
if cb then
|
|||
|
cb()
|
|||
|
end
|
|||
|
|
|||
|
XEventManager.DispatchEvent(XEventId.EVENT_TASKFORCE_REFRESH_REQUEST)
|
|||
|
end)
|
|||
|
end
|
|||
|
|
|||
|
--请求立即完成任务
|
|||
|
function XTaskForceManager.TaskForceTaskFinishRequest(taskId)
|
|||
|
XNetwork.Call(XTaskForceRequest.TaskForceTaskFinishRequest, { TaskId = taskId }, function(resp)
|
|||
|
if resp.Code ~= XCode.Success then
|
|||
|
XUiManager.TipCode(resp.Code)
|
|||
|
return
|
|||
|
end
|
|||
|
|
|||
|
if not TaskForceInfo then
|
|||
|
return
|
|||
|
end
|
|||
|
|
|||
|
if not TaskForceInfo.TaskList or #TaskForceInfo.TaskList <= 0 then
|
|||
|
return
|
|||
|
end
|
|||
|
|
|||
|
for _, var in ipairs(TaskForceInfo.TaskList) do
|
|||
|
if var.TaskId == resp.TaskId then
|
|||
|
var.Status = XTaskForceManager.TaskForceTaskStatus.Complete
|
|||
|
break
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
XEventManager.DispatchEvent(XEventId.EVENT_TASKFORCE_TASKFINISH_REQUEST, { taskId })
|
|||
|
|
|||
|
end)
|
|||
|
end
|
|||
|
|
|||
|
--请求领取奖励
|
|||
|
function XTaskForceManager.AcceptTaskForceRewardRequest(taskId, callback)
|
|||
|
XNetwork.Call(XTaskForceRequest.AcceptTaskForceRewardRequest, { TaskId = taskId }, function(resp)
|
|||
|
if resp.Code ~= XCode.Success then
|
|||
|
XUiManager.TipCode(resp.Code)
|
|||
|
return
|
|||
|
end
|
|||
|
|
|||
|
if not TaskForceInfo then
|
|||
|
return
|
|||
|
end
|
|||
|
|
|||
|
if not TaskForceInfo.TaskList or #TaskForceInfo.TaskList <= 0 then
|
|||
|
return
|
|||
|
end
|
|||
|
|
|||
|
|
|||
|
TaskForceInfo.TaskList = resp.TaskList
|
|||
|
|
|||
|
local result = {}
|
|||
|
result.DropList = {}
|
|||
|
result.ExtraRewardList = {}
|
|||
|
result.Rewards = {}
|
|||
|
|
|||
|
if resp.DropList and #resp.DropList > 0 then
|
|||
|
result.IsBigReward = true
|
|||
|
for _, var in ipairs(resp.DropList) do
|
|||
|
table.insert(result.DropList, var)
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
|
|||
|
if resp.ExtraRewardList and #resp.ExtraRewardList > 0 then
|
|||
|
for _, var in ipairs(resp.ExtraRewardList) do
|
|||
|
table.insert(result.ExtraRewardList, var)
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
if resp.RewardList and #resp.RewardList > 0 then
|
|||
|
for _, var in ipairs(resp.RewardList) do
|
|||
|
table.insert(result.Rewards, var)
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
if callback then
|
|||
|
callback(result)
|
|||
|
end
|
|||
|
|
|||
|
XEventManager.DispatchEvent(XEventId.EVENT_TASKFORCE_ACCEPT_REWARD_REQUEST)
|
|||
|
|
|||
|
end)
|
|||
|
end
|
|||
|
|
|||
|
XTaskForceManager.ShowMaxTaskForceTeamCountChangeTips = false
|
|||
|
XTaskForceManager.ShowMaxTaskForceCountChangeTips = false
|
|||
|
--消息推送
|
|||
|
function XTaskForceManager.TaskForceInfoNotify(data)
|
|||
|
|
|||
|
if TaskForceInfo and TaskForceInfo.ConfigIndex then
|
|||
|
if data.TaskForceInfo.ConfigIndex ~= TaskForceInfo.ConfigIndex then
|
|||
|
XTaskForceManager.ShowMaxTaskForceTeamCountChangeTips = true
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
TaskForceInfo = data.TaskForceInfo
|
|||
|
NextRefreshTime = data.NextRefreshTime
|
|||
|
|
|||
|
|
|||
|
XEventManager.DispatchEvent(XEventId.EVENT_TASKFORCE_INFO_NOTIFY)
|
|||
|
end
|
|||
|
|
|||
|
--章节变化
|
|||
|
function XTaskForceManager.TaskForceSectionChangeNotify(data)
|
|||
|
if not TaskForceInfo then
|
|||
|
return
|
|||
|
end
|
|||
|
|
|||
|
TaskForceInfo.SectionId = data.SectionId
|
|||
|
XEventManager.DispatchEvent(XEventId.EVENT_TASKFORCE_SECTIONCHANGE_NOTIFY)
|
|||
|
|
|||
|
end
|
|||
|
|
|||
|
--可派遣队伍最大数量改变通知
|
|||
|
function XTaskForceManager.MaxTaskForceCountChangeNotify(data)
|
|||
|
if not TaskForceInfo then
|
|||
|
return
|
|||
|
end
|
|||
|
|
|||
|
if TaskForceCountConfig and TaskForceCountConfig[data.MaxTaskForceCount] then
|
|||
|
local config = TaskForceCountConfig[data.MaxTaskForceCount]
|
|||
|
TaskForceInfo.ConfigIndex = config.Id
|
|||
|
end
|
|||
|
|
|||
|
XEventManager.DispatchEvent(XEventId.EVENT_TASKFORCE_MAXTASKFORCECOUNT_CHANGE_NOTIFY)
|
|||
|
end
|
|||
|
|
|||
|
--任务完成
|
|||
|
function XTaskForceManager.TaskForceCompleteNotify(data)
|
|||
|
if not TaskForceInfo then
|
|||
|
return
|
|||
|
end
|
|||
|
|
|||
|
local taskList = data.TaskList
|
|||
|
for _, taskId in ipairs(taskList) do
|
|||
|
XTaskForceManager.CompletedTaskForceTask(taskId)
|
|||
|
end
|
|||
|
|
|||
|
XEventManager.DispatchEvent(XEventId.EVENT_TASKFORCE_COMPLETE_NOTIFY, data.TaskList)
|
|||
|
end
|
|||
|
|
|||
|
function XTaskForceManager.HandlerPlayTipMission()
|
|||
|
if XDataCenter.TaskForceManager.ShowMaxTaskForceTeamCountChangeTips then
|
|||
|
local missionData = XDataCenter.TaskForceManager.GetTaskForeInfo()
|
|||
|
local taskForeCfg = XDataCenter.TaskForceManager.GetTaskForceConfigById(missionData.ConfigIndex)
|
|||
|
XUiManager.TipMsg(string.format(CS.XTextManager.GetText("MissionTaskTeamCountContent"), taskForeCfg.MaxTaskForceCount), nil, function()
|
|||
|
XEventManager.DispatchEvent(XEventId.EVENT_TASKFORCE_TIP_MISSION_END)
|
|||
|
end)
|
|||
|
XDataCenter.TaskForceManager.ShowMaxTaskForceTeamCountChangeTips = false
|
|||
|
return true
|
|||
|
end
|
|||
|
return false
|
|||
|
end
|
|||
|
---------------------------------------
|
|||
|
local Condition = {
|
|||
|
[18105] = function(condition, characterId) -- 派遣中拥有指定数量指定兵种构造
|
|||
|
local character = XDataCenter.CharacterManager.GetCharacter(characterId)
|
|||
|
local npcId = XCharacterConfigs.GetCharNpcId(character.Id, character.Quality)
|
|||
|
local npcTemplate = CS.XNpcManager.GetNpcTemplate(npcId)
|
|||
|
if npcTemplate.Type == condition.Params[1] then
|
|||
|
return true
|
|||
|
end
|
|||
|
return false, condition.Desc
|
|||
|
end,
|
|||
|
|
|||
|
[18106] = function() -- 派遣中拥有指定数量达到指定战斗力的构造体
|
|||
|
return true
|
|||
|
end,
|
|||
|
|
|||
|
[18107] = function(condition, characterId) -- 派遣中拥有指定数量达到指定品质的构造体
|
|||
|
local character = XDataCenter.CharacterManager.GetCharacter(characterId)
|
|||
|
if character.Quality >= condition.Params[1] then
|
|||
|
return true
|
|||
|
end
|
|||
|
return false, condition.Desc
|
|||
|
end,
|
|||
|
|
|||
|
[18108] = function(condition, characterId) -- 派遣中拥有指定数量达到指定等级的构造体
|
|||
|
local character = XDataCenter.CharacterManager.GetCharacter(characterId)
|
|||
|
return character.Level >= condition.Params[1], condition.Desc
|
|||
|
end,
|
|||
|
|
|||
|
[18109] = function(condition, characterId) -- 派遣中拥有指定数量指定性别的构造体
|
|||
|
local characterTemplate = XCharacterConfigs.GetCharacterTemplate(characterId)
|
|||
|
return characterTemplate.Sex == condition.Params[1], condition.Desc
|
|||
|
end,
|
|||
|
|
|||
|
[18110] = function(condition, characterId) -- 派遣中拥有构造体
|
|||
|
if characterId == condition.Params[1] then
|
|||
|
return true
|
|||
|
end
|
|||
|
|
|||
|
return false, condition.Desc
|
|||
|
end,
|
|||
|
}
|
|||
|
|
|||
|
---检查单个
|
|||
|
function XTaskForceManager.CheckCondition(conditionId, characterId)
|
|||
|
|
|||
|
local template = XConditionManager.GetConditionTemplate(conditionId)
|
|||
|
if not template then
|
|||
|
XLog.ErrorTableDataNotFound("XTaskForceManager.CheckCondition", "template",
|
|||
|
"Share/Condition/Condition.tab", "conditionId", tostring(conditionId))
|
|||
|
return false
|
|||
|
end
|
|||
|
|
|||
|
local func = Condition[template.Type]
|
|||
|
if not func then
|
|||
|
local tempStr = "XConditionManager.CheckCharacterCondition错误:无法根据Share/Condition/Condition.tab 表中conditionId:"
|
|||
|
XLog.Error(tempStr .. conditionId .. " 的type:" .. template.Type .. "找到Condition对应的函数")
|
|||
|
return false
|
|||
|
end
|
|||
|
|
|||
|
return func(template, characterId)
|
|||
|
end
|
|||
|
|
|||
|
---检查需求人数
|
|||
|
function XTaskForceManager.GetConditionRequireMember(conditionId)
|
|||
|
local template = XConditionManager.GetConditionTemplate(conditionId)
|
|||
|
if not template then
|
|||
|
XLog.ErrorTableDataNotFound("XTaskForceManager.GetConditionRequireMember",
|
|||
|
"template", "Share/Condition/Condition.tab", "conditionId", tostring(conditionId))
|
|||
|
return 0
|
|||
|
end
|
|||
|
|
|||
|
if template.Type >= 18105 and template.Type < 18110 then
|
|||
|
return template.Params[2]
|
|||
|
end
|
|||
|
|
|||
|
return 1
|
|||
|
end
|
|||
|
------
|
|||
|
XTaskForceManager.Init()
|
|||
|
return XTaskForceManager
|
|||
|
end
|
|||
|
|
|||
|
XRpc.TaskForceInfoNotify = function(data)
|
|||
|
XDataCenter.TaskForceManager.TaskForceInfoNotify(data)
|
|||
|
end
|
|||
|
|
|||
|
XRpc.TaskForceSectionChangeNotify = function(data)
|
|||
|
XDataCenter.TaskForceManager.TaskForceSectionChangeNotify(data)
|
|||
|
end
|
|||
|
|
|||
|
XRpc.MaxTaskForceCountChangeNotify = function(data)
|
|||
|
XDataCenter.TaskForceManager.MaxTaskForceCountChangeNotify(data)
|
|||
|
end
|
|||
|
|
|||
|
XRpc.TaskForceCompleteNotify = function(data)
|
|||
|
XDataCenter.TaskForceManager.TaskForceCompleteNotify(data)
|
|||
|
end
|