MainTask.lua 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. --主线任务流
  2. --db
  3. --[=[
  4. human.db.mainTaskData = {
  5. taskData = {
  6. [taskId] = {
  7. progress = ni, --当前进度
  8. isGetReward = nil, --是否已领奖, isGetReward为真标识已领奖
  9. },
  10. },
  11. nowTaskId = nil, --当前任务
  12. }
  13. ]=]--
  14. local Msg = require("core.Msg")
  15. local Grid = require("bag.Grid")
  16. local BagLogic = require("bag.BagLogic")
  17. local Lang = require("common.Lang")
  18. local Broadcast = require("broadcast.Broadcast")
  19. local Config = require("excel.mainTask")
  20. local TriggerDefine = require("trigger.TriggerDefine")
  21. local TriggerLogic = require("trigger.TriggerLogic")
  22. local ObjHuman = require("core.ObjHuman")
  23. --获取某类任务在该活动之前就达成的进度
  24. local function getTaskOldProgress(human, taskType)
  25. end
  26. -- 初始化任务
  27. local function initTask(human)
  28. if not human.db.mainTaskData then
  29. human.db.mainTaskData = {nowTaskId = 1, taskData = {}}
  30. local taskData = human.db.mainTaskData.taskData
  31. --一些任务需要统计老的进度数据
  32. local type2Val = {}
  33. for taskId, taskCfg in ipairs(Config) do
  34. if taskCfg.isCalcOldVal then
  35. local taskType = taskCfg.type
  36. if not type2Val[taskType] then
  37. type2Val[taskType] = getTaskOldProgress(human, taskType)
  38. end
  39. if type2Val[taskType] and type2Val[taskType] > 0 then
  40. taskData[taskId] = {
  41. progress = type2Val[taskType]
  42. }
  43. end
  44. end
  45. end
  46. end
  47. end
  48. --订阅事件
  49. local function subscribeEvents(human)
  50. local taskData = human.db.mainTaskData.taskData
  51. local nowTaskId = human.db.mainTaskData.nowTaskId
  52. local maxTaskId = #Config
  53. local maxTaskCfg = Config[maxTaskId]
  54. if nowTaskId == maxTaskId and taskData[maxTaskId] and (taskData[maxTaskId].isGetReward or taskData[maxTaskId].progress >= maxTaskCfg.condProgress) then
  55. return
  56. end
  57. local registerTypeList = {}
  58. for _, taskCfg in ipairs(Config) do
  59. if not registerTypeList[ taskCfg.eventType] and (not taskData[maxTaskId] or not taskData[maxTaskId].isGetReward or taskData[maxTaskId].progress < taskCfg.condProgress) then
  60. TriggerLogic.SubscribeEvent(taskCfg.eventType, human.db._id, EventCBFunc)
  61. registerTypeList[ taskCfg.eventType] = 1
  62. end
  63. end
  64. end
  65. function onLogin(human)
  66. initTask(human)
  67. subscribeEvents(human)
  68. end
  69. --事件处理函数
  70. function EventCBFunc(eventType, uuid, nValue1, nValue2)
  71. local human = ObjHuman.onlineUuid[uuid]
  72. if not human then
  73. return
  74. end
  75. local isNowTask = false
  76. local taskData = human.db.mainTaskData.taskData
  77. local nowTaskId = human.db.mainTaskData.nowTaskId
  78. for taskId, taskCfg in ipairs(Config) do
  79. if taskCfg.eventType == eventType and (not taskData[taskId] or not taskData[taskId].isGetReward or taskData[taskId].progress < taskCfg.condProgress) then
  80. taskData[taskId] = taskData[taskId] or {}
  81. taskData[taskId].progress = (taskData[taskId].progress or 0) + nValue1
  82. if taskId == nowTaskId then
  83. isNowTask = true
  84. end
  85. end
  86. end
  87. --推数据给客户端更新
  88. if isNowTask then
  89. end
  90. end
  91. function TaskQuery(human)
  92. end
  93. function GetReward(human, taskId)
  94. end