|
|
@@ -18,58 +18,90 @@ local Grid = require("bag.Grid")
|
|
|
local BagLogic = require("bag.BagLogic")
|
|
|
local Lang = require("common.Lang")
|
|
|
local Broadcast = require("broadcast.Broadcast")
|
|
|
-local Config = require("excel.mainTask")
|
|
|
+local Config = require("excel.mainTask").mainTask
|
|
|
local TriggerLogic = require("trigger.TriggerLogic")
|
|
|
local TriggerDefine = require("trigger.TriggerDefine")
|
|
|
local ObjHuman = require("core.ObjHuman")
|
|
|
+local EliteDefine = require("battle.EliteDefine")
|
|
|
|
|
|
--日志标识
|
|
|
local MAINTASKLOGTAG = "mainTask"
|
|
|
|
|
|
+
|
|
|
+local function initTaskData(human)
|
|
|
+ human.db.mainTaskData = {nowTaskId = 1, taskData = {}}
|
|
|
+end
|
|
|
+
|
|
|
+local function getTaskData(human)
|
|
|
+ return human.db.mainTaskData
|
|
|
+end
|
|
|
+
|
|
|
+local function updateTaskProgress(human, taskId, val, isAdd)
|
|
|
+ local mainTaskData = getTaskData(human)
|
|
|
+ local taskData = mainTaskData.taskData
|
|
|
+ taskData[taskId] = taskData[taskId] or {}
|
|
|
+
|
|
|
+ if isAdd then
|
|
|
+ taskData[taskId].progress = (taskData[taskId].progress or 0) + val
|
|
|
+ else
|
|
|
+ taskData[taskId].progress = val
|
|
|
+ end
|
|
|
+end
|
|
|
+
|
|
|
+local function updateTaskStatus(human, taskId, newStatus)
|
|
|
+ local mainTaskData = getTaskData(human)
|
|
|
+ local taskData = mainTaskData.taskData
|
|
|
+ taskData[taskId].isGetReward = newStatus
|
|
|
+end
|
|
|
+
|
|
|
+local function updateNowTaskId(human, newTaskId)
|
|
|
+ local mainTaskData = getTaskData(human)
|
|
|
+ mainTaskData.nowTaskId = newTaskId
|
|
|
+end
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
--获取某类任务在该活动之前就达成的进度
|
|
|
-local function getTaskOldProgress(human, taskType)
|
|
|
+local function getTaskOldProgress(human, eventType)
|
|
|
local progress = 0
|
|
|
|
|
|
- if taskType == TriggerDefine.HUANJINGTOWER_LV then
|
|
|
+ if eventType == TriggerDefine.HUANJINGTOWER_PASS then
|
|
|
local HuanJingTowerLogic = require("huanjingTower.HuanjingTowerLogic")
|
|
|
progress = HuanJingTowerLogic.getTowerLevel(human)
|
|
|
|
|
|
- elseif taskType == TriggerDefine.LIANYU_PASS then
|
|
|
+ elseif eventType == TriggerDefine.LIANYU_PASS then
|
|
|
local LianyuLogic = require("lianyu.LianyuLogic")
|
|
|
progress = LianyuLogic.getMaxLv(human)
|
|
|
|
|
|
- elseif taskType == TriggerDefine.REALM_UPGRADE then
|
|
|
+ elseif eventType == TriggerDefine.REALM_UPGRADE then
|
|
|
local RoleRealmLogic = require("roleSystem.RoleRealmLogic")
|
|
|
progress = RoleRealmLogic.GetNowRealmLv(human)
|
|
|
|
|
|
- elseif taskType == TriggerDefine.BATTLE_NORMAL_MODE_PASS then
|
|
|
+ elseif eventType == TriggerDefine.BATTLE_NORMAL_MODE_PASS then
|
|
|
local BattleLogic = require("battle.BattleLogic")
|
|
|
- progress = BattleLogic.GetLevelByType(human)
|
|
|
+ progress = BattleLogic.GetLevelByType(human, EliteDefine.COPY_ELITE_NORMAL)
|
|
|
end
|
|
|
|
|
|
return progress
|
|
|
end
|
|
|
|
|
|
|
|
|
--- 初始化任务
|
|
|
-local function initTask(human)
|
|
|
- if not human.db.mainTaskData then
|
|
|
- human.db.mainTaskData = {nowTaskId = 1, taskData = {}}
|
|
|
- local taskData = human.db.mainTaskData.taskData
|
|
|
+-- 统计部分任务老的进度
|
|
|
+local function calcTaskOldProgress(human)
|
|
|
+ local mainTaskData = getTaskData(human)
|
|
|
+ if not mainTaskData then
|
|
|
+ initTaskData(human)
|
|
|
|
|
|
- --一些任务需要统计老的进度数据
|
|
|
local type2Val = {}
|
|
|
for taskId, taskCfg in ipairs(Config) do
|
|
|
- if taskCfg.isCalcOldVal then
|
|
|
- local taskType = taskCfg.type
|
|
|
- if not type2Val[taskType] then
|
|
|
- type2Val[taskType] = getTaskOldProgress(human, taskType)
|
|
|
+ if taskCfg.isCalcOldVal > 0 then --一些任务需要统计老的进度数据
|
|
|
+ local eventType = taskCfg.eventType
|
|
|
+ if not type2Val[eventType] then
|
|
|
+ type2Val[eventType] = getTaskOldProgress(human, eventType)
|
|
|
end
|
|
|
|
|
|
- if type2Val[taskType] and type2Val[taskType] > 0 then
|
|
|
- taskData[taskId] = {
|
|
|
- progress = type2Val[taskType]
|
|
|
- }
|
|
|
+ if type2Val[eventType] and type2Val[eventType] > 0 then
|
|
|
+ updateTaskProgress(human, taskId, type2Val[eventType], false)
|
|
|
end
|
|
|
end
|
|
|
end
|
|
|
@@ -78,18 +110,20 @@ end
|
|
|
|
|
|
--订阅事件
|
|
|
local function subscribeEvents(human)
|
|
|
- local taskData = human.db.mainTaskData.taskData
|
|
|
- local nowTaskId = human.db.mainTaskData.nowTaskId
|
|
|
+ local mainTaskData = getTaskData(human)
|
|
|
+ local taskData = mainTaskData.taskData
|
|
|
+ local nowTaskId = mainTaskData.nowTaskId
|
|
|
local maxTaskId = #Config
|
|
|
local maxTaskCfg = Config[maxTaskId]
|
|
|
- if nowTaskId == maxTaskId and taskData[maxTaskId] and (taskData[maxTaskId].isGetReward or taskData[maxTaskId].progress >= maxTaskCfg.condProgress) then
|
|
|
+ if nowTaskId == maxTaskId and taskData[maxTaskId] and taskData[maxTaskId].progress >= maxTaskCfg.condProgress then
|
|
|
return
|
|
|
end
|
|
|
|
|
|
|
|
|
local registerTypeList = {}
|
|
|
- for _, taskCfg in ipairs(Config) do
|
|
|
- if not registerTypeList[ taskCfg.eventType] and (not taskData[maxTaskId] or not taskData[maxTaskId].isGetReward or taskData[maxTaskId].progress < taskCfg.condProgress) then
|
|
|
+
|
|
|
+ for taskId, taskCfg in ipairs(Config) do
|
|
|
+ if not registerTypeList[taskCfg.eventType] and (not taskData[taskId] or taskData[taskId].progress < taskCfg.condProgress) then
|
|
|
TriggerLogic.SubscribeEvent(taskCfg.eventType, human.db._id, EventCBFunc)
|
|
|
registerTypeList[ taskCfg.eventType] = 1
|
|
|
end
|
|
|
@@ -98,7 +132,7 @@ end
|
|
|
|
|
|
|
|
|
function onLogin(human)
|
|
|
- initTask(human)
|
|
|
+ calcTaskOldProgress(human)
|
|
|
subscribeEvents(human)
|
|
|
end
|
|
|
|
|
|
@@ -111,16 +145,20 @@ function EventCBFunc(eventType, uuid, nValue1, nValue2)
|
|
|
end
|
|
|
|
|
|
local isNowTask = false
|
|
|
- local taskData = human.db.mainTaskData.taskData
|
|
|
- local nowTaskId = human.db.mainTaskData.nowTaskId
|
|
|
+ local mainTaskData = getTaskData(human)
|
|
|
+ local taskData = mainTaskData.taskData
|
|
|
+ local nowTaskId = mainTaskData.nowTaskId
|
|
|
|
|
|
for taskId, taskCfg in ipairs(Config) do
|
|
|
- if taskCfg.eventType == eventType and (not taskData[taskId] or not taskData[taskId].isGetReward or taskData[taskId].progress < taskCfg.condProgress) then
|
|
|
- taskData[taskId] = taskData[taskId] or {}
|
|
|
- taskData[taskId].progress = (taskData[taskId].progress or 0) + nValue1
|
|
|
+ if taskCfg.eventType == eventType and (not taskData[taskId] or taskData[taskId].progress < taskCfg.condProgress) then
|
|
|
|
|
|
- if taskId == nowTaskId then
|
|
|
- isNowTask = true
|
|
|
+ if taskCfg.extraCond <= 0 or (nValue2 and nValue2 >= taskCfg.extraCond) then
|
|
|
+
|
|
|
+ updateTaskProgress(human, taskId, nValue1, true)
|
|
|
+
|
|
|
+ if taskId == nowTaskId then
|
|
|
+ isNowTask = true
|
|
|
+ end
|
|
|
end
|
|
|
end
|
|
|
end
|
|
|
@@ -134,8 +172,9 @@ end
|
|
|
|
|
|
--查询
|
|
|
function TaskQuery(human)
|
|
|
- local taskData = human.db.mainTaskData.taskData
|
|
|
- local nowTaskId = human.db.mainTaskData.nowTaskId
|
|
|
+ local mainTaskData = getTaskData(human)
|
|
|
+ local taskData = mainTaskData.taskData
|
|
|
+ local nowTaskId = mainTaskData.nowTaskId
|
|
|
local maxTaskId = #Config
|
|
|
|
|
|
local nowTaskCfg = Config[nowTaskId]
|
|
|
@@ -158,8 +197,9 @@ end
|
|
|
|
|
|
--领奖
|
|
|
function GetReward(human, taskId)
|
|
|
- local taskData = human.db.mainTaskData.taskData
|
|
|
- local nowTaskId = human.db.mainTaskData.nowTaskId
|
|
|
+ local mainTaskData = getTaskData(human)
|
|
|
+ local taskData = mainTaskData.taskData
|
|
|
+ local nowTaskId = mainTaskData.nowTaskId
|
|
|
|
|
|
local nowTaskCfg = Config[nowTaskId]
|
|
|
if not taskData[nowTaskId] or taskData[nowTaskId].progress < nowTaskCfg.condProgress then
|
|
|
@@ -170,16 +210,54 @@ function GetReward(human, taskId)
|
|
|
return Broadcast.sendErr(human, Lang.FRIEND_HEART_GET_HAD)
|
|
|
end
|
|
|
|
|
|
- taskData[nowTaskId].isGetReward = true
|
|
|
+ updateTaskStatus(human, nowTaskId, true)
|
|
|
|
|
|
|
|
|
- local rewardCfg = Config[nowTaskId].reward
|
|
|
- BagLogic.addItemList(human, { {rewardCfg[1], rewardCfg[2]}}, MAINTASKLOGTAG)
|
|
|
+ local rewardCfg = nowTaskCfg.reward
|
|
|
+ BagLogic.addItemList(human, { {rewardCfg[1], rewardCfg[2]} }, MAINTASKLOGTAG)
|
|
|
|
|
|
|
|
|
nowTaskId = nowTaskId + 1
|
|
|
if Config[nowTaskId] then
|
|
|
- human.db.mainTaskData.nowTaskId = nowTaskId
|
|
|
+ updateNowTaskId(human, nowTaskId)
|
|
|
+ end
|
|
|
+ TaskQuery(human)
|
|
|
+end
|
|
|
+
|
|
|
+--GM 更新任务进度
|
|
|
+function GM_UpdateTaskProgress(human, taskId, progress)
|
|
|
+ if not taskId or not progress then
|
|
|
+ return
|
|
|
end
|
|
|
+ updateTaskProgress(human, taskId, progress)
|
|
|
TaskQuery(human)
|
|
|
-end
|
|
|
+end
|
|
|
+
|
|
|
+--GM 更新当前任务
|
|
|
+function GM_UpdateNowTask(human, newTaskId)
|
|
|
+ if not Config[newTaskId] then
|
|
|
+ return
|
|
|
+ end
|
|
|
+ updateNowTaskId(human, newTaskId)
|
|
|
+ TaskQuery(human)
|
|
|
+end
|
|
|
+
|
|
|
+--GM 清除任务
|
|
|
+function GM_ClearTask(human, taskId)
|
|
|
+ if not taskId then
|
|
|
+ return
|
|
|
+ end
|
|
|
+
|
|
|
+ local mainTaskData = getTaskData(human)
|
|
|
+ mainTaskData[taskId] = nil
|
|
|
+ TaskQuery(human)
|
|
|
+end
|
|
|
+
|
|
|
+function GM_ClearAllTaskData(human)
|
|
|
+ human.db.mainTaskData = nil
|
|
|
+
|
|
|
+ calcTaskOldProgress(human)
|
|
|
+
|
|
|
+ TaskQuery(human)
|
|
|
+end
|
|
|
+
|