MainTask.lua 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185
  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 TriggerLogic = require("trigger.TriggerLogic")
  21. local TriggerDefine = require("trigger.TriggerDefine")
  22. local ObjHuman = require("core.ObjHuman")
  23. --日志标识
  24. local MAINTASKLOGTAG = "mainTask"
  25. --获取某类任务在该活动之前就达成的进度
  26. local function getTaskOldProgress(human, taskType)
  27. local progress = 0
  28. if taskType == TriggerDefine.HUANJINGTOWER_LV then
  29. local HuanJingTowerLogic = require("huanjingTower.HuanjingTowerLogic")
  30. progress = HuanJingTowerLogic.getTowerLevel(human)
  31. elseif taskType == TriggerDefine.LIANYU_PASS then
  32. local LianyuLogic = require("lianyu.LianyuLogic")
  33. progress = LianyuLogic.getMaxLv(human)
  34. elseif taskType == TriggerDefine.REALM_UPGRADE then
  35. local RoleRealmLogic = require("roleSystem.RoleRealmLogic")
  36. progress = RoleRealmLogic.GetNowRealmLv(human)
  37. elseif taskType == TriggerDefine.BATTLE_NORMAL_MODE_PASS then
  38. local BattleLogic = require("battle.BattleLogic")
  39. progress = BattleLogic.GetLevelByType(human)
  40. end
  41. return progress
  42. end
  43. -- 初始化任务
  44. local function initTask(human)
  45. if not human.db.mainTaskData then
  46. human.db.mainTaskData = {nowTaskId = 1, taskData = {}}
  47. local taskData = human.db.mainTaskData.taskData
  48. --一些任务需要统计老的进度数据
  49. local type2Val = {}
  50. for taskId, taskCfg in ipairs(Config) do
  51. if taskCfg.isCalcOldVal then
  52. local taskType = taskCfg.type
  53. if not type2Val[taskType] then
  54. type2Val[taskType] = getTaskOldProgress(human, taskType)
  55. end
  56. if type2Val[taskType] and type2Val[taskType] > 0 then
  57. taskData[taskId] = {
  58. progress = type2Val[taskType]
  59. }
  60. end
  61. end
  62. end
  63. end
  64. end
  65. --订阅事件
  66. local function subscribeEvents(human)
  67. local taskData = human.db.mainTaskData.taskData
  68. local nowTaskId = human.db.mainTaskData.nowTaskId
  69. local maxTaskId = #Config
  70. local maxTaskCfg = Config[maxTaskId]
  71. if nowTaskId == maxTaskId and taskData[maxTaskId] and (taskData[maxTaskId].isGetReward or taskData[maxTaskId].progress >= maxTaskCfg.condProgress) then
  72. return
  73. end
  74. local registerTypeList = {}
  75. for _, taskCfg in ipairs(Config) do
  76. if not registerTypeList[ taskCfg.eventType] and (not taskData[maxTaskId] or not taskData[maxTaskId].isGetReward or taskData[maxTaskId].progress < taskCfg.condProgress) then
  77. TriggerLogic.SubscribeEvent(taskCfg.eventType, human.db._id, EventCBFunc)
  78. registerTypeList[ taskCfg.eventType] = 1
  79. end
  80. end
  81. end
  82. function onLogin(human)
  83. initTask(human)
  84. subscribeEvents(human)
  85. end
  86. --事件处理函数
  87. function EventCBFunc(eventType, uuid, nValue1, nValue2)
  88. local human = ObjHuman.onlineUuid[uuid]
  89. if not human then
  90. return
  91. end
  92. local isNowTask = false
  93. local taskData = human.db.mainTaskData.taskData
  94. local nowTaskId = human.db.mainTaskData.nowTaskId
  95. for taskId, taskCfg in ipairs(Config) do
  96. if taskCfg.eventType == eventType and (not taskData[taskId] or not taskData[taskId].isGetReward or taskData[taskId].progress < taskCfg.condProgress) then
  97. taskData[taskId] = taskData[taskId] or {}
  98. taskData[taskId].progress = (taskData[taskId].progress or 0) + nValue1
  99. if taskId == nowTaskId then
  100. isNowTask = true
  101. end
  102. end
  103. end
  104. --推数据给客户端更新
  105. if isNowTask then
  106. TaskQuery(human)
  107. end
  108. end
  109. --查询
  110. function TaskQuery(human)
  111. local taskData = human.db.mainTaskData.taskData
  112. local nowTaskId = human.db.mainTaskData.nowTaskId
  113. local maxTaskId = #Config
  114. local nowTaskCfg = Config[nowTaskId]
  115. local msgRet = Msg.gc.GC_MAINTASK_QUERY
  116. msgRet.nowTaskId = nowTaskId
  117. msgRet.nowProgess = taskData[nowTaskId] and taskData[nowTaskId].progress or 0
  118. msgRet.condProgess = nowTaskCfg.condProgress
  119. msgRet.taskDesc = nowTaskCfg.taskDesc
  120. msgRet.panelID = nowTaskCfg.panelID
  121. Grid.makeItem(msgRet.taskAward, nowTaskCfg.reward[1], nowTaskCfg.reward[2])
  122. msgRet.isNoTask = 0
  123. if nowTaskId == maxTaskId and taskData[nowTaskId] and taskData[nowTaskId].isGetReward then
  124. msgRet.isNoTask = 1
  125. end
  126. Msg.send(msgRet, human.fd)
  127. end
  128. --领奖
  129. function GetReward(human, taskId)
  130. local taskData = human.db.mainTaskData.taskData
  131. local nowTaskId = human.db.mainTaskData.nowTaskId
  132. local nowTaskCfg = Config[nowTaskId]
  133. if not taskData[nowTaskId] or taskData[nowTaskId].progress < nowTaskCfg.condProgress then
  134. return Broadcast.sendErr(human, Lang.UNION_TASK_NOT_COMPLETE)
  135. end
  136. if taskData[nowTaskId] and taskData[nowTaskId].isGetReward then
  137. return Broadcast.sendErr(human, Lang.FRIEND_HEART_GET_HAD)
  138. end
  139. taskData[nowTaskId].isGetReward = true
  140. local rewardCfg = Config[nowTaskId].reward
  141. BagLogic.addItemList(human, { {rewardCfg[1], rewardCfg[2]}}, MAINTASKLOGTAG)
  142. nowTaskId = nowTaskId + 1
  143. if Config[nowTaskId] then
  144. human.db.mainTaskData.nowTaskId = nowTaskId
  145. end
  146. TaskQuery(human)
  147. end